文件操作

  • 不带句柄的文件操作

    // 1. 拷贝文件,第三个参数为 FALSE 表示会覆盖
    // CopyFile(L"D:\\1.txt", L"E:\\2.txt", FALSE);

    // 2. 移动文件,相当于改名
    // MoveFile(L"D:\\1.txt", L"D:\\2.txt");

    // 3. 获取文件属性
    WIN32_FILE_ATTRIBUTE_DATA FileInfo = { };
    GetFileAttributesEx(L"D:\\2.txt", GetFileExInfoStandard, &FileInfo);

    // 3.1 判断文件的属性是否是只读
    if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
    printf("该文件只读");
    else
    printf("该文件可修改");

    // 4. 删除文件[不要随便用]
    DeleteFile(L"D:\\2.txt");

    // 5. 删除一个目录使用下列函数 RemoveDirectory()
  • 带句柄的文件操作

    // 1. 创建\打开文件,返回文件句柄,失败返回 -1
    HANDLE FileHandle = CreateFile(
    L"E:\\2.txt", // 文件的路径
    GENERIC_ALL, // 表示可以对文件执行任何操作
    NULL, // 共享方式,我正在操作的时候,允许其他进程执行的操作
    NULL, // 安全属性
    OPEN_EXISTING, // 始终创建这个文件
    FILE_ATTRIBUTE_NORMAL, // 普通的文件
    NULL);

    // 2. 判断是否创建成功
    if (FileHandle == INVALID_HANDLE_VALUE)
    {
    MessageBox(NULL, L"文件创建失败", L"警告", MB_OK);
    ExitProcess(-);
    }


    // 3. 通过句柄读取文件
    // 参数一: 文件的句柄
    // 参数二: 读取到的数据存放到哪里
    // 参数三: 需要读取多少数据(字节)
    // 参数四: 读取成功了多少数据
    // 参数五: 重叠 IO 结构,暂时用不到
    DWORD RealRead = ;
    CHAR Buffer[0x100] = { };
    BOOL ReadSucess = ReadFile(FileHandle,
    Buffer, , &RealRead, NULL);
    if (ReadSucess == TRUE) printf("%s\n", Buffer);

    // 4. 设置\获取偏移
    SetFilePointer(FileHandle, , , FILE_BEGIN);

    // 4. 写入文件
    // 参数一: 文件的句柄
    // 参数二: 想要写入的数据
    // 参数三: 需要写入多少数据(字节)
    // 参数四: 写入成功了多少数据
    // 参数五: 重叠 IO 结构,暂时用不到
    DWORD RealWrite = ;
    WriteFile(FileHandle, "abcdef", , &RealWrite, NULL);

    // 7. 设置文件的结束位置为当前文件指针的位置
    SetFilePointer(FileHandle, , , FILE_BEGIN);
    SetEndOfFile(FileHandle);

    // 5. 获取大小
    int LowSize = GetFileSize(FileHandle, NULL);
  • 文件的遍历

    // 递归遍历文件:
    VOID File(LPCWSTR FilePath)
    {
    // 1. 拼接想要遍历的路径
    wstring FindPath = wstring(FilePath)+ L"\\*";

    // 提供结构体用于保存遍历到的信息
    WIN32_FIND_DATA FileInfo = { };

    // 尝试遍历第一个文件\文件夹
    HANDLE FindHande = FindFirstFile(FindPath.c_str(), &FileInfo);

    // 如果遍历成功,则输出信息并继续遍历
    if (FindHande != INVALID_HANDLE_VALUE)
    {
    do {
    // 判断是否是一个目录
    if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    {
    // 判断文件夹是否是 . 和 ..,排除掉进行递归
    if (wcscmp(L".", FileInfo.cFileName) &&
    wcscmp(L"..", FileInfo.cFileName))
    {
    // 使用函数进行递归遍历
    printf("[目录]: %ls\n", FileInfo.cFileName);

    // 拼接新的路径,下一层需要查找的路径
    wstring newpath = wstring(FilePath) + L"\\" + FileInfo.cFileName; // 递归调用函数
    File(newpath.c_str());
    }
    }
    else
    {
    // 输出文件名
    printf("[文件]: %ls ", FileInfo.cFileName);

    // 输出文件的创建时间
    FILETIME LocalFileTime = { };
    FileTimeToLocalFileTime(&FileInfo.ftCreationTime, &LocalFileTime);

    // 转换时间戳为系统时间
    SYSTEMTIME SystemTime = { };
    FileTimeToSystemTime(&LocalFileTime, &SystemTime);

    // 输出时间日期
    printf("%d 年 %d 月 %d 日 %d 时 %d 分 %d 秒\n",
    SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay,
    SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond);
    }

    } while (FindNextFile(FindHande, &FileInfo));
    }
    }

Windows提高_1.3文件操作的更多相关文章

  1. Windows与Linux下文件操作监控的实现

    一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场 ...

  2. Windows、Linux下文件操作(写、删除)错误的产生原因、及解决方法

    catalog . 引言 . Linux平台上涉及的File IO操作 . Windows平台上涉及的File IO操作 0. 引言 本文试图讨论在windows.linux操作系统上基于C库进行文件 ...

  3. Windows Store 开发总结——文件操作

    1.读取Isolated Storage 每个Metro程序都有三个文件夹:Local,Roaming,Temp.每个文件夹的访问方法都是相同的. Local用于将数据存储在本地,这是程序特定的文件夹 ...

  4. Windows提高_1.2遍历进程、遍历模块

    进程 什么是进程? 通俗的来讲,进程就是一个运行中的程序,最少包含一个虚拟空间,通常是 4 GB大小,一组提供数据和代码的模块,通产是 dll 和 exe 文件,一个进程内核对象和最少一个线程. 进程 ...

  5. Windows system 在python文件操作时的路径表示方法

    file_path =(r'i:\vacpy\ch10\pi_digits.txt') #将文件路径存储在变量file_path中with open (file_path) as file_objec ...

  6. Windows提高_1.1内核对象

    内核对象 什么是内核对象? 内核对象本质上是一个结构体,我们不能直接的操作一个内核对象,需要通过操作系统提供的一系列函数和我们使用的内核对象句柄对它进行一系列的修改. 如何操作内核对象? 创建一个内核 ...

  7. Windows提高_1.4进程通信

    进程通信 使用 WM_COPYDATA 客户端(发送端) // 1. 找到窗口程序 HWND hWnd = FindWindow(NULL, L"Window1"); ​ // 2 ...

  8. Windows文件操作的API函数[转载]

    在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍: 一般文件操作 API CreateFile 打开文件 要对文件进行读 ...

  9. 提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)

    复制.移动.删除.比较.监控.文件读写 等文件和IO操作是编程中比较常用的功能.        幸运的是,Apache Commons IO等开源组件已经帮我们实现了.        我们可以不用重复 ...

随机推荐

  1. [办公应用]如何保护我的EXCEL表格结构,不被填表人员随意改动

    同事很苦恼的说,下发要求部门人员填写的EXCEL表格,已经加了密码,结果最后还是被他们自行复制后,更改了列结构,“一塌糊涂”的填写交了上来.这样给他的后续处理带来了很多麻烦. 我相信不少朋友很多时候都 ...

  2. webpack之傻瓜式教程(转载)

    1.安装好nodejs,安装过程网上找. 2.在D盘.E盘或任意一个磁盘中新建文件夹,命名为webpack_demo: 3.在webpack_demo文件下按住Shift键后点击鼠标右键,再左键点击“ ...

  3. [Other]面试复习笔记:线程与进程复习

    基本概念 1. 进程的基本概念 线程(thread)是进程(processes)中某个单一顺序的控制流,也被称为轻量进程(lightweight processes).进程是表示资源分配的基本单位,又 ...

  4. POJ3675 Telescope 圆和多边形的交

    POJ3675 用三角剖分可以轻松搞定,数据也小 随便AC. #include<iostream> #include<stdio.h> #include<stdlib.h ...

  5. Ural 1158. Censored! 有限状态自动机+DP+大整数

    Ural1158 看上去很困难的一道题. 原文地址 http://blog.csdn.net/prolightsfxjh/article/details/54729646 题意:给出n个不同的字符,用 ...

  6. ORACLE获取某个时间段之间的月份列表和日期列表

    ORACLE获取某个时间段之间的月份列表获取某个时间段之间的月份列表(示例返回2009-03到2010-03之间的月份列表) SELECT TO_CHAR(ADD_MONTHS(TO_DATE('20 ...

  7. 用msys1.0+mingw gcc4.7.1编译libodb(C++ ORM)

    这里主要使用的是libodb 对sqlite数据库的支持. (1)下载编译sqlite3,当初编译go-sqlite3的时候下载过sqlite3,就直接拿过来用了. start msys.bat gc ...

  8. 全分布式的Hadoop虚拟机安装

    在集群环境下装机.配置.运行的全过程,梳理总结到本文中. 第一部分:环境规划 •用户 hadoop 密码 hadoop •机器 机器名称 IP地址 Master.Hadoop 192.168.1.10 ...

  9. poj Find a multiple【鸽巢原理】

    参考:https://www.cnblogs.com/ACShiryu/archive/2011/08/09/poj2356.html 鸽巢原理??? 其实不用map但是习惯了就打的map 以下C-c ...

  10. [Swift通天遁地]一、超级工具-(7)创建一个图文并茂的笔记本程序

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...