文件操作
-
不带句柄的文件操作
// 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 = { 0 }; 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(-1); } // 3. 通过句柄读取文件 // 参数一: 文件的句柄 // 参数二: 读取到的数据存放到哪里 // 参数三: 需要读取多少数据(字节) // 参数四: 读取成功了多少数据 // 参数五: 重叠 IO 结构,暂时用不到 DWORD RealRead = 0; CHAR Buffer[0x100] = { 0 }; BOOL ReadSucess = ReadFile(FileHandle, Buffer, 100, &RealRead, NULL); if (ReadSucess == TRUE) printf("%s ", Buffer); // 4. 设置获取偏移 SetFilePointer(FileHandle, 0, 0, FILE_BEGIN); // 4. 写入文件 // 参数一: 文件的句柄 // 参数二: 想要写入的数据 // 参数三: 需要写入多少数据(字节) // 参数四: 写入成功了多少数据 // 参数五: 重叠 IO 结构,暂时用不到 DWORD RealWrite = 0; WriteFile(FileHandle, "abcdef", 6, &RealWrite, NULL); // 7. 设置文件的结束位置为当前文件指针的位置 SetFilePointer(FileHandle, 2, 0, FILE_BEGIN); SetEndOfFile(FileHandle); // 5. 获取大小 int LowSize = GetFileSize(FileHandle, NULL);
-
文件的遍历
// 递归遍历文件: VOID File(LPCWSTR FilePath) { // 1. 拼接想要遍历的路径 wstring FindPath = wstring(FilePath)+ L"\*"; // 提供结构体用于保存遍历到的信息 WIN32_FIND_DATA FileInfo = { 0 }; // 尝试遍历第一个文件文件夹 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 ", FileInfo.cFileName); // 拼接新的路径,下一层需要查找的路径 wstring newpath = wstring(FilePath) + L"\" + FileInfo.cFileName; // 递归调用函数 File(newpath.c_str()); } } else { // 输出文件名 printf("[文件]: %ls ", FileInfo.cFileName); // 输出文件的创建时间 FILETIME LocalFileTime = { 0 }; FileTimeToLocalFileTime(&FileInfo.ftCreationTime, &LocalFileTime); // 转换时间戳为系统时间 SYSTEMTIME SystemTime = { 0 }; FileTimeToSystemTime(&LocalFileTime, &SystemTime); // 输出时间日期 printf("%d 年 %d 月 %d 日 %d 时 %d 分 %d 秒 ", SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay, SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond); } } while (FindNextFile(FindHande, &FileInfo)); } }
-