Win32学习笔记——文件系统

	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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值