学习《C/C++ Windows 程序设计》的第四天
编译环境:Windows 10 VS2019
学习目的:文件的基本操作,读写、创建、删除、遍历
涉及API函数:ReadFile()、WriteFile()、SetFilePointer()、CreateDirectory()、RemoveDirectory()、FindFirstFile()、FindNextFile()
1、WriteFile():从文件指针指向的位置开始将数据写入到一个文件中, 且支持同步和异步操作
注意点: 1、所读文件前需获取文件句柄,可以使用CreateFile()函数进行打开文件获取句柄;
2、打开的文件需具备“GENERIC_WRITE”访问权限;
3、第二参数为写数据的首地址,取首地址运用“&”获取,数组的首地址为数组名;
2、ReadFile():从文件指针指向的位置开始将文件数据读入内存中, 且支持同步和异步操作。
注意点:读取数据需按循序进行读取;
3、SetFilePointer():设置文件当前的读写位置,弥补了ReadFile()函数需按循序读取的不足,可以指定读写位置;
注意点: 1、所读打开的文件必须有“GENERIC_READ”或者“ GENERIC_WRITE ”的权限;
2、第四个参数作用,表明读取循序,有FILE_BEGIN->从文件头开始往后移动;FILE_CURRENT->从文件的当前指针位置开始移动;FILE_END->从文件尾部开始往前移动;
4、CreateDirectory():创建一个新的单一层级的目录
注意点: 1、创建单一层级,如创建多层层级将创建失败;
2、创建多层文件,可以使用嵌套创建,多次使用该函数或者使用MakeSureDirectoryPathExists()函数;
5、RemoveDirectory():删除一个现有的不包含任何文件的空目录;
注意点: 1、删除的文件为空目录,如目录不为空,则删除失败;
2、删除不为空的目录,可以使用SHFileOperation()函数,特别注意使用该函数需要包含对应的头文件#include <Shlwapi.h>|#pragma comment (lib,"Shlwapi.lib"),并且该函数不仅仅可以做删除操作,还可做想对应的复制、移动、重命名;
6、文件的遍历,使用到FindFristFile()[查找首个文件]与FindNextFile()[查找下一个文件],
代码示例,-> 采用控制台程序
#include <iostream>
#include <tchar.h>
#include <Windows.h>
using namespace std;
#pragma warning (disable:4996)
BOOL EnumFiles(LPCTSTR lpszPath,LPCTSTR lpType) //lpszPath:遍历的路径|lpType:遍历的类型
{
//构造一个目录下的那种类型的文件
TCHAR szPath[MAX_PATH] = { 0 };
//格式化输出
_stprintf(szPath, "%s\\%s", lpszPath,lpType);
WIN32_FIND_DATA 文件属性 = { 0 };
//查找第一个文件
HANDLE hFile = FindFirstFile(szPath,&文件属性);
//如果查找失败,返回FALSE
if (hFile == INVALID_HANDLE_VALUE) return FALSE;
BOOL bRet = TRUE;
//使用do循环语句进行遍历
do
{
bRet = FindNextFile(hFile, &文件属性);
//判断是否成功,失败了就退出
if (!bRet) break;
cout << 文件属性.cFileName << endl;
} while (bRet);
return TRUE;
}
int main(int argc, char* argv[])
{
LPCTSTR 遍历目录 = "C:\\Windows";
EnumFiles(遍历目录,"*.*");
return 0;
}
自己编写时出现的问题:
1、没有构造遍历类型,遍历的结果是空,需要设置遍历文件的类型。
2021年11月19日
|