一 Windows卷(Volumn)
1. 卷的获取
GetLogicalDrivers 返回一个DWORD值,这个值的没个位代表是否存在相应的卷
GetLogicaDriverStrings 获取一个卷的盘符的字符串。
void ShowVolumn()
{
//获取系统的位标识
DWORD dwDrivers = GetLogicalDrives() ;
printf("Drives: %08X\n", dwDrivers) ;
//获取系统盘的所有盘符
TCHAR szText[MAX_PATH] = {0} ;
GetLogicalDriveStrings(MAX_PATH, szText) ;
TCHAR * pszTemp = szText ;
//输出盘符
while (0 != pszTemp[0])
{
wprintf(_T("Drives: %s\n"), pszTemp) ;
pszTemp += wcslen(pszTemp) + 1 ;
}
}
2. 卷的类型
GetDriveType 返回磁盘的类型
void ShowType(LPTSTR pszDrive)
{
UINT nType = GetDriveType(pszDrive) ;
switch(nType)
{
case DRIVE_FIXED :
{
printf("硬盘\n") ;
}
break;
case DRIVE_CDROM:
{
printf("光驱\n") ;
}
break;
default:
break;
}
}
3. 卷的信息
GetVolumInfomation
void ShowVolumInfo(LPTSTR pszDrive)
{
TCHAR szVolumeNameBuffer[MAX_PATH] = {0};
DWORD dwVolumeNameSize = MAX_PATH;
DWORD VolumeSerialNumber = 0;
DWORD MaximumComponentLength = 0;
DWORD FileSystemFlags = 0 ;
TCHAR FileSystemNameBuffer[MAX_PATH] = {0} ;
DWORD FileSystemNameSize = MAX_PATH ;
GetVolumeInformation(pszDrive, szVolumeNameBuffer, dwVolumeNameSize, &VolumeSerialNumber
, &MaximumComponentLength, &FileSystemFlags, FileSystemNameBuffer, FileSystemNameSize) ;
//程序本地化
setlocale(LC_ALL, "chs") ;
wprintf(_T("\t %s %08X %d %08X %s\n"),szVolumeNameBuffer, VolumeSerialNumber
,MaximumComponentLength, FileSystemFlags, FileSystemNameBuffer) ;
}
4.卷的大小
GetDiskFreeSpace 2G以下
GetDiskFreeSpace 不限制
文件系统是通过簇管理硬盘,没个簇是由几个扇区组成。例如2/4/8/16/32扇区构成1个簇
FAT32文件系统1个簇 = 8K字节
NTFS文件系统1个簇 = 4K 字节
簇是文件系统存放数据的最小单位。即使文件只有1个字节也需要占用1簇。
void ShowSpace(LPTSTR pszDrive)
{
DWORD dwSectorsPerCluster = 0 ; //每个簇有多少个扇区
DWORD dwBytesPerSector = 0; //每个扇区有多少个字节
DWORD dwNumberOfFreeClusters = 0; //空闲的簇
DWORD dwTotalNumberOfClusters= 0; //簇的总量
GetDiskFreeSpace(pszDrive, &dwSectorsPerCluster, &dwBytesPerSector
, &dwNumberOfFreeClusters, &dwTotalNumberOfClusters) ;
printf("\t每个簇的扇区数量 = %d, 每个扇区的字节数量 = %d,\n"
"\t空闲簇的数量 = %d, 簇的总量 = %d\n",dwSectorsPerCluster
,dwBytesPerSector, dwNumberOfFreeClusters, dwTotalNumberOfClusters);
ULARGE_INTEGER FreeBytesAvailable ;
ULARGE_INTEGER TotalNumberOfBytes ;
ULARGE_INTEGER TotalNumberOfFreeBytes ;
GetDiskFreeSpaceEx(pszDrive, &FreeBytesAvailable
, &TotalNumberOfBytes, &TotalNumberOfFreeBytes) ;
printf("\t可用空闲字节数:%I64d, 总字节数:%I64d, 总空闲字节数%I64d\n"
,FreeBytesAvailable, TotalNumberOfBytes,TotalNumberOfFreeBytes) ;
}
5. 更改卷标
SetVolumeLabel
二 目录
1. 系统和当前目录
1.1 GetWindowsDirectory
1.2 GetSystemDirectory
1.3 GetTmpPaht
1.4 GetCurrentDirectory
SetCurrentDirectory
2. 目录的使用
2.1 创建目录
CreateDirectory
2.2 删除目录
RemoveDirectory //只能是空目录
2.3 修改目录名称
MoveFile
三 文件
1. 文件的创建或打开
CreateFile
2. 文件的关闭
CloseHandle
3. 文件数据的写入
WriteFile
4. 文件数据的读取
ReadFile
5. 获取文件长度
GetFileSize
该函数的第二个参数为高32位,返回值为低32位
文件的长度 = (低32位 , 高32位)
6. 设置文件指针
SetFilePointer
返回值是返回偏移量的低32位
7. 拷贝文件
CopyFile
8. 删除文件
DeleteFile
9. 文件的属性
GetFileAttributes
GetFileAttributesEx
四 文件的查找
1. 查找文件
FindFirstFile
2. 获取查找到的结果
FindNextFile
3. 关闭查找
FindClose