Windows系统编程(一) 文件与目录操作

以下程序需要包含头文件

创建打开文件

HANDLE hFile = CreateFile("D:\\rkvir.ini", GENERIC_READ | GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

此处打开文件,参数依次 已有文件的路径,注意\\是转义字符 对文件操作的权限,此处是读写两种权限  共享模式,此处无共享状态  安全属性,一般写NULL  对存在或不存在文件进行的操作,此处是始终打开文件,如果没有该文件则创建一个新文件  文件属性,此处是常规属性 模板,一般填NNULL

    if (INVALID_HANDLE_VALUE == hFile) 判断文件是否创建或打开成功,此处等号左边是一个宏,比对句柄是否是一个无效句柄

    {

       std::cout << "CreateFile Failed!" << std::endl;

    }

    CHAR * szBuffer[MAX_PATH] = { 0 }; 此处开始文件书写,申请一个缓存空间

    memcpy(szBuffer, "Hello File", strlen("Hello File")); 在该缓存空间拷贝数据

    DWORD dwNumberOfBytesWritten = 0; 记录该文件目前数据长度的变量

    BOOL bRet = WriteFile(hFile, szBuffer, strlen("Hello File"), &dwNumberOfBytesWritten, NULL);

书写该文件并接收函数返回值 参数依次 文件句柄 指向缓冲区的指针 写入内容长度  记录目前已经

写了多少数据  异步读写结构一般填NULL

    if (!bRet) 判断是否写入文件失败

    {

       std::cout << "WriteFile Failed!" << std::endl; 提示创建失败

       std::cout << GetLastError() << std::endl; 显示文件创建失败的原因,打印的是数字,可以在工

具下错误查找中输入数字进行查找错因

    }

    CloseHandle(hFile); 关闭文件句柄

读取文件

HANDLE hFile = CreateFile("D:\\rkvir.ini", GENERIC_READ | GENERIC_WRITE, NULL, NULL,

OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

    if (INVALID_HANDLE_VALUE == hFile)

    {

       std::cout << "CreateFile Failed!" << std::endl; 显示创建失败

       std::cout << GetLastError() << std::endl;

    }

    LARGE_INTEGER liFileSize; 设置一个接收文件大小的结构体,该结构体内存由两个32位大小

内存构成64位大小,原因是文件有32位和64位大小

    if (!GetFileSizeEx(hFile, &liFileSize)) 获取文件大小,参数依次 文件句柄  接收文件大小结构体

的指针,成功返回1,否则0

    {

       std::cout << "GetFileSizeEx Failed!" << std::endl;

       std::cout << GetLastError() << std::endl;

    }

    SetFilePointer(hFile, 2, NULL, FILE_BEGIN); 设置一个文件指针,参数依次 文件句柄,该句柄

具有读写权限 指针在文件中起始位置,也叫偏移量    

  高位内存,指针偏移超过低位内存时需要写,一般不会超过写NULL  指针要偏移时开始的位置

    CHAR * szBuffer = new CHAR[liFileSize.LowPart + 1]; 创建一个读取信息的缓冲区,大小是该文件大小结构体32位的大小。要多申请一位,一位内存越界

    memset(szBuffer, 0, liFileSize.LowPart + 1); 初始化缓冲区

    DWORD lpNumberOfBytesRead; 设置记录文件目前数据长度的变量

    BOOL bRet = ReadFile(hFile, szBuffer, liFileSize.LowPart, &lpNumberOfBytesRead, NULL);

取文件并接收函数返回值 参数依次 文件句柄  要读取文件的缓冲区指针  需要读取的文件范围数据

长度  实际读取文件的长度

    if (!bRet) 判断是否读取失败

    {

       std::cout << "ReadFile Failed!" << std::endl;

       std::cout << GetLastError() << std::endl;

    }

    std::cout << szBuffer << std::endl; 打印读取的内容,直到00结尾

    CloseHandle(hFile);

移动文件

方式一:直接移动文件

    MoveFile("D:\\Atest1\\rkvir.ini", "D:\\Atest2\\rkvir.ini"); 移动文件,参数依次 原文件所在路径 现件

所在路径    DeleteFile("D:\\Atest2\\rkvir.ini"); 此时删除文件

方式二:现有一个文件1在A文件夹中,在B文件夹中创建一个空白文件2,拷贝文件1到空白文件

2,完成移动

    CopyFile("D:\\Atest1\\rkvir.ini", "D:\\Atest2\\rkvir.ini",TRUE);

参数3:参数为TURE时,如果要拷贝的文件已经存在同名文件,则文件创建失败。参数为FALSE

时,则覆盖已经存在的的同名文件

目录操作

    CreateDirectory("D:\\Atest3", NULL); 参数依次 目录所在路径  一般填NULL

    RemoveDirectory("D:\\Atest3"); 只能删除空目录

遍历仅有文件的目录下文件:

    WIN32_FIND_DATA FindFileData; 设置一个用于装载与找到的文件有关

信息的结构体

    HANDLE hFile = FindFirstFile("D:\\Atest1\\*", &FindFileData); 在特定目录下查找第一个文件

参数依次 特定目录的路径,*表示该目录下所有东西  存储信息的结构体地址

    if (INVALID_HANDLE_VALUE == hFile) 没有找到文件时操作

    {

       std::cout << "FindFirstFile Failed!" << std::endl;

       std::cout << GetLastError() << std::endl;

    }

    do

    {

       std::cout << FindFileData.cFileName << std::endl; 输出查找到的文件名字,打印结果前两行

有点,这是表示上级路径和当前路径

       SYSTEMTIME lpSystemTime; 该结构用于设置指定时间和日期,此处是一个系统时间

        FileTimeToSystemTime(&FindFileData.ftCreationTime, &lpSystemTime); 将文件时间转化成

指定时间 参数依次 文件时间结构地址  指定时间结构地址

       std::cout << lpSystemTime.wYear << " " << lpSystemTime.wMonth << std::endl; 打印文件的

时间年月

       if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)判断该目录下是否有有

子目录时,参数依次 目前文件属性  表示目录的句柄

       {

           std::cout << "DIRECTORY!" << std::endl;

       }

    } while (FindNextFile(hFile, &FindFileData));

指定获取某文件属性

HANDLE hFile = CreateFile("D:\\Atest1\\rkvir.ini", GENERIC_READ | GENERIC_WRITE, NULL,

NULL, OPEN_ALWAYS, FILE_ATT RIBUTE_NORMAL, NULL); 打开以文件,并接收文件句柄

BY_HANDLE_FILE_INFORMATION bhFileInfo; 创建一个结构用于存储文件信息

GetFileInformationByHandle(hFile, &bhFileInfo); 获取文件属性 参数依次 文件句柄 存储文件信

息的结构体地址

你可能感兴趣的:(windows)