跳至主要内容

21.文件系统

文件系统

  • 文件系统是操作系统用于管理磁盘上文件的方法和数据结构;简单点说就是在磁盘上如何组织文件的方法。
  • 以32位系统为例
NTFS FAT32
磁盘分区容量 2T(2048G) 32G
单个文件容量 4G以上 最大4G
EFS加密 支持 不支持
磁盘配额 支持 不支持

卷相关API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
VOID TestVolumn(){
//获取卷
DWORD dwLogicalDrives = GetLogicalDrives();

//获取一个所卷的盘符的字符串
DWORD dwMaxLength = 100;
char szBuffer[100];
GetLogicalDriveStringsA(dwMaxLength, szBuffer);

//获取卷的类型
UINT uType = GetDriveType("A:\\");

//获取卷的信息
TCHAR szVolumeName[260] = {0};
DWORD dwVolumeSerial = 0;
DWORD dwMaxLength_1 = 0;
DWORD dwFileSystem = 0;
TCHAR szFileSystem = {0};
GetVolumeInformation(
"A:\\", //IN 磁盘驱动器代码字符串
szVolumeName, //OUT 磁盘驱动器卷标名称
260, //IN 磁盘驱动卷标名称长度
&dwVolumeSerial, //OUT 磁盘驱动器卷标序列号(不是硬盘序列号,该号是硬盘出厂时生产厂家为区别产品而设置的,就像人的身份证号一样)
&dwMaxLength_1, //OUT 系统允许的最大文件名长度
&dwFileSystem, //OUT 文件系统标识
&szFileSystem, //OUT 文件系统名称
260 //IN 文件系统名称长度
);


}

目录相关API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
VOID TestDirectory(){
//创建目录
CreateDirectory("Z:\\hello",NULL);
//删除目录
RemoveDirectory("Z:\\hello");
//修改目录名
MoveFile("Z:\\hello","z:\\hello1");
//获取程序当前目录
CHAR szCurrentDirectoryPath[MAX_PATH] = {0};
GetCurrentDirectory(MAX_PATH,szCurrentDirectoryPath);
printf("Current Directory Path: %s\n",szCurrentDirectoryPath);
//设置程序当前目录
SetCurrentDirectory("Z:\\");
CreateDirectoryA("ABC", NULL);
}

文件相关API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
VOID TestFile(){
//创建文件
HANDLE hFile = CreateFile(
"C:\\A.txt",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);

//文件的关闭
CloseHandle(hFile);

//获取文件长度
DWORD dwHigh = 0;
DWORD dwLow = GetFileSize(hFile, &dwHigh);

//获取文件的属性和信息
WIN32_FILE_ATTRIBUTE_DATA data = {0};
GetFileAttributesEx("z:\\hello",GetFileExInfoStandard,&data);
printf("Attri=%lx\n",data.dwFileAttributes);
printf("SizeHigh=%lx\n",data.nFileSizeHigh);
printf("SizeLow=%lx\n",data.nFileSizeLow);
printf("CreationTime=%lx\n",data.ftCreationTime);//可以用FileTimeToSystemTime转换
printf("LastAccessTime=%lx\n",data.ftLastAccessTime);
printf("LastWriteTime=%lx\n",data.ftLastWriteTime);

//读取文件
//分配空间
LPSTR pszBuffer = (LPSTR)malloc(10);
ZeroMemory(pszBuffer,10);
//设置当前读取的位置
SetFilePointer(hFile, 1, NULL, FILE_END);
//读取数据
DWORD dwReadLength = 0;
ReadFile(hFile, pszBuffer, 10, &dwReadLength, NULL);
printf("%s",pszBuffer);
//释放内存
free(pszBuffer);
//关闭文件
CloseHandle(hFile);



//写入文件
// 写文件
TCHAR szBuffer[] = TEXT("中国");
DWORD dwWritten = 0;
WriteFile(hFile, szBuffer, strlen(szBuffer),&dwWritten, NULL);
// 关闭文件
CloseHandle(hFile);
//拷贝文件
CopyFile("Z:\\old.txt","z:\\new.txt",FALSE);
//删除文件
DeleteFile("z:\\old.txt");
}

关于本文

由 GuQing 撰写,采用 CC BY-NC 4.0 许可协议。