Win32文件系统编程 一丶了解什么是文件系统
文件系统是抽象的.是windows在软件层面提供的一层虚拟的数据结构.
文件系统分为NTFS 跟 FAT32. 具体看看两者的区别吧.
磁盘分区容量.
单个文件容量. 意思就是一个文件可以是多大的. NTFS 是可以4G以上的大文件. FAT32则不可以.
EFS加密. 这个加密主要针对当前用户的(例如Admins 管理员账户) 具体可以 点击一个文件. 文件->属性 -> 高级 -> 加密保护文件内容.
如果在当前用户则不会有什么结果. 但是如果换了用户访问.则不可以访问这个加密文件了.
加密后的文件.
文件颜色都会改变.
磁盘配额 意思就是可以限制别的用户访问这个硬盘多少G内存.
具体设置 xp下 盘符属性-> 配额
关于上面的讲解我们只需要了解即可.不深究.具体的的是学习API. API为我们封装好了.我们并不用关心NTFS 或者FAT32
二丶Windows提供的操作 "文件" 的 API
标题中文件为什么添加了引号. 意思是不光可以操作文件. 在windows系统中.一切东西都虚拟为了文件. 例如管道 等等.. 都可以使用这些API.
api具体介绍
1.了解卷 文件 跟目录的关系. 卷API卷指的就是我们的的逻辑硬盘. 例如C盘.
目录则是C盘里面的文件夹. 文件夹里面可能还是以文件夹. 也可能是文件.
卷操作API 很简单. 常用的就四个.
DWORD GetLogIcalDrives() 获取卷 返回值是10进制.我们需要转化成16进制.然后转换成二进制查看.每一位为1代表有这个磁盘.否则则没有
GetLogIcalDriveStrings(buffsize,buf) 获取一个卷的盘符的字符串
GetDriveType(""目录名称") 获取卷的类型
GetVolumeInformation() 获取卷的类型
如以下代码例子:
// A.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <Windows.h> int main() { //1.获取磁盘逻辑驱动卷 DWORD dwGetDrives = GetLogicalDrives(); /* 例如我的返回值是 252 转化为16进制 FC 转化为二进制 11111100 代表我们有六个磁盘. CDEFGH 而我的恰好就是 CDEFGH 盘. */ //2.获取磁盘卷字符串. TCHAR wszBuf[1024] = { NULL }; DWORD dwSize = sizeof(TCHAR) * 1024; GetLogicalDriveStringsW(dwSize, wszBuf); /* 逻辑驱动器返回后会存在wszBuf里面. 自己做分割即可. 例如 C:\ B:\ */ //3.根据指定盘符获取它的类型. 可以移除的还是不可以移除的. DWORD dwDriveType = GetDriveTypeW(TEXT("C:\\")); //具体返回值查询MSDN 注意从0开始 //4.获取卷的详细信息. DWORD dwVolumneSerial = 0; //驱动卷的序列号(不是硬盘序列号) DWORD dwFileMaxLen = 0; //系统允许的最大文件名的长度 DWORD dwFileSystem = 0; //文件系统标识. TCHAR dwFileSystemBuffer[255] = { 0 }; //文件操作系统的名称 TCHAR szVolName[255] = { 0 }; //返回的卷的别名 GetVolumeInformationW( TEXT("c:\\"), // IN参数 你要查看那个卷的信息 szVolName, // OUT参数. 查询到的卷的别名会给你.例如你的别名是C sizeof(TCHAR) * 255, // IN参数. 上面缓冲区的大小. &dwVolumneSerial, // OUT 驱动卷的序列号 &dwFileMaxLen, // OUT 写文件读文件等等文件名最大可以是多大. &dwFileSystem, // OUT 文件操作系统标识.有多中宏组合,具体可以查询MSDN. 标识你这个文件是 dwFileSystemBuffer, //你当前系统是 NTFS 还是FAT32 sizeof(TCHAR) * 255 //上面缓冲区的大小. ); return 0; }