- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
文件系统基本概念
文件操作(基本)
文件操作(属性)
文件系统基本概念
-
文件(File):计算机中存储数据的基本单位。文件可以是文本文件、图像文件、音频文件、视频文件等,每个文件都有一个唯一的文件名。
-
目录(Directory):也称为文件夹,用于组织和存储文件。目录可以包含文件和其他目录,形成文件系统的层次结构。
-
文件系统的层次结构
-
层次结构(Hierarchy):文件系统中文件和目录之间的组织关系形成了层次结构,通常是树状结构,其中根目录是顶层目录,包含其他目录和文件,而子目录可以包含更多的子目录和文件。
-
文件操作(基本)
- 创建文件
- 在Windows系统中,可以使用 C++ 的标准库函数来创建文件,也可以使用 Windows API 如 CreateFile()。
- 打开和关闭文件
- 文件在使用前必须打开,并在使用完后关闭以释放系统资源。Windows API 提供了CreateFile()函数来打开或创建文件,并使用CloseHandle()来关闭文件。
- 读取和写入文件内容
-
文件内容的读取和写入可以通过标准C++库中的fstream类或Windows API的
ReadFile()
和WriteFile()
函数实现。 -
在一个文件中设置当前的读写位置
SetFilePointer
。 -
针对一个打开的文件,将当前文件位置设为文件末尾
SetEndOfFile
。
-
- 复制文件 - CopyFile 函数用于复制文件。
- 移动文件 - MoveFile 或 MoveFileEx 函数用于移动文件。
- 删除文件 - DeleteFile 函数用于删除文件。
- 示例代码
-
#include <iostream> #include <Windows.h>int main() {const char* FileName = "D:\\Test.txt";const char* outPutData = "Hello 0xCC";char szBuffer[0xFF] = { 0 };DWORD dwWriteBytes = 0;DWORD dwReadBytes = 0;HANDLE hFile = NULL;// 创建或者打开文件hFile = CreateFileA(FileName,GENERIC_READ | GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);if (hFile == INVALID_HANDLE_VALUE){if (GetLastError() == ERROR_FILE_EXISTS) std::cout << "ERROR_FILE_EXISTS" << std::endl;return 1;}// 写入文件数据内容if (!WriteFile(hFile, outPutData, strlen(outPutData), &dwWriteBytes, NULL)){std::cout << "WriteFile -> " << GetLastError() << std::endl;CloseHandle(hFile);return 2;}// 读取文件数据内存SetFilePointer(hFile, 0, NULL, FILE_BEGIN);if (!ReadFile(hFile, szBuffer, 0xFF, &dwReadBytes, NULL)){std::cout << "ReadFile -> " << GetLastError() << std::endl;CloseHandle(hFile);return 3;}CloseHandle(hFile);return 0; }
文件操作(属性)
- 文件属性和元数据是文件系统提供的数据,用于描述文件的特性和状态。属性可以包括文件的只读状态、隐藏状态、系统状态等,而元数据可以包括文件的创建、修改和访问时间。
-
在Windows中,可以使用
GetFileAttributes
和SetFileAttributes
函数获取和设置文件的属性。 -
只读(Read-only):该文件不可被修改。
-
隐藏(Hidden):该文件在默认情况下不显示。
-
系统(System):表示文件是系统文件,这通常表示操作系统用于内部用途的文件。
-
存档(Archive):用于备份和恢复操作,表明文件自上次备份后已被修改。
-
- 文件时间戳
-
可以通过
GetFileTime
和SetFileTime
函数来获取和设置这些时间戳。 -
可以通过
CompareFileTime
来判断文件时间是否相同。 -
创建时间:文件被创建的时间。
-
修改时间:文件最后被修改的时间。
-
访问时间:文件最后被访问的时间。
-
- 文件大小
- 可以通过GetFileSize/GetFileSizeEx来获取指定文件的大小。
-
#include <iostream> #include <Windows.h>int main() {HANDLE hFile = CreateFile(L"D:\\Debug\\WinHex_v20.3_SR-5_x86_x64.exe",GENERIC_ALL,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);LARGE_INTEGER li = { 0 };GetFileSizeEx(hFile, &li);return 0; }
- 对象类型
- 可以使用GetFileType确定打开的文件(设备)的类型。
-
#include <iostream> #include <Windows.h>int main() {HANDLE hFile = CreateFile(L"D:\\Debug\\WinHex_v20.3_SR-5_x86_x64.exe",GENERIC_ALL,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);DWORD dwType = GetFileType(hFile);return 0; }
- 文件路径
- 可以使用GetFullPathName指定文件的完整路径
-
TCHAR szBuffer[MAX_PATH] = { 0 };GetFullPathName(L"0xCC.exe", MAX_PATH, szBuffer, NULL);
- 示例代码
-
#include <iostream> #include <Windows.h>int main() {const char* FilePath = "D:\\Test.txt";// 获取文件属性DWORD dwAttribute = GetFileAttributesA(FilePath);std::cout << std::hex << dwAttribute << std::endl;// 获取文件时间HANDLE hFile = CreateFileA(FilePath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if (hFile == INVALID_HANDLE_VALUE) return 1;FILETIME CreateTime, AccessTime, WriteTime;GetFileTime(hFile, &CreateTime, &AccessTime, &WriteTime);SYSTEMTIME sysTime = { 0 };FileTimeToSystemTime(&CreateTime, &sysTime);FileTimeToSystemTime(&AccessTime, &sysTime);FileTimeToSystemTime(&WriteTime, &sysTime);return 0; }