文件系统和文件输入输出

文件系统和文件输入输出

(file system & file I/O)



系统和卷操作

GetLogicalDrives函数:

DWORD GetLogicalDrives(void);

该函数返回一个32位的值,其中每一位代表是否某一个逻辑驱动器存在。(第1位代表A,

第25位代表Z)

GetLogicalDriveStrings函数:

DWORD GetLogicalDriveStrings(DWORD cchBuffer, //

系统中每一个逻辑驱动器相关的

根目录信息将填充该指针指向的缓冲区

LPTSTR lpszBuffer); // 告诉函数缓冲区的最大尺寸

该函数返回保存所有数据所需的字节数.

调用方法:

DWORD dw=GetLogicalDriveStrings(0,NULL);

LPSTR lpDriveStrings=HeapAlloc(GetProcessHeap(),0,dw*sizeof(TCHAR));

GetLogicalDriveStrings(dw,lpDriveStrings);

返回缓冲区的内容和环境串缓冲区有相同的格式:项目之间由0字符分割,在最后有一个另

外的结束符0。

Windows 95:

该函数没有实现。



GetDriveType函数:

UINT GetDriveType(LPTSTR lpszRootPathName);

该函数返回由lpszRootPathName标识的驱动器的类型,见下表:

标识符 含义

0 无法确定驱动器的类型

1 不存在的根目录

DRIVE_REMOVEABLE 磁盘可以从驱动器中移走(软盘驱动器)

DRIVE_FIXED 磁盘不能从驱动器中移走(硬盘驱动器)

DRIVE_REMOTE 驱动器是远程驱动器(网络驱动器)

DRIVE_CDROM 驱动器是一个CD_ROM驱动器

DRIVE_RAMDISK 驱动器是一个RAM盘

获得卷的特定信息

GetVolumeInformation函数:

GetVolumeInformation(LPTSTR lpRootPathName, // 逻辑驱动器的相关根目录

LPTSTR lpVolumeNameBuffer, // 返回卷的名字

DWORD nVolumeNameSize, // 卷缓冲区的尺寸

LPDWORD lpVolumeSerialNumber, // 卷的序列号

LPDWORD lpMaximumComponentLength, //

返回支持的目录名和文件名的最大字符数

LPDWORD lpFileSystemFlags, // 返回文件系统的标志,见下表

LPTSTR lpFileSystemNameBuffer, //

返回文件系统的名字(FAT,HPFS,NTFS或CDFS)

DWORD nFileSystemNameSize); // 文件系统名字缓冲区的最大尺寸

标志 含义

FS_CASE_IS_PRESERVED 当名字存入磁盘时文件名大小写保留下来

FS_CASE_SENSITIVE 文件系统支持大小写敏感文件名查询

FS_UNICODE_STORED_ON_DISK 文件系统支持磁盘上的文件名使用Unicode

FS_PERSISTENT_ACLS 文件系统维护和增强访问控制表(只在NTFS下)

GetDiskFreeSpace函数:

BOOL GetDiskFreeSpace(LPTSTR lpszRootPathName,// 逻辑驱动器的相关根目录

LPDWORD lpSectorsPerCluster, // 每簇多少扇区

LPDWORD lpBytesPerSector, // 每扇区多少字节

LPDWORD lpFreeClusters, // 空闲扇区数量

LPDWORD lpClusters); // 总扇区数量

DeviceIoControl函数:

BOOL DeviceIoControl(HANDLE hDevice, // 磁盘设备的句柄

DWORD dwIoControlCode,// 设备命令

LPVOID lpvInBuffer,DWORD cbInBuffer,LPVOID lpvOutBuffer,DWORD cbOutBuffer,

LPDWORD lpcbBytesReturned,LPOVERLAPPED lpOverlapped);

该函数用来直接向磁盘设备驱动程序发明令或请求信息.

hDevice参数指定一个磁盘设备的句柄.这个句柄可以调用函数CreateFile而得到.如果你

想获得指向一个软盘驱动器或一个硬盘驱动器的单个分区的句柄,按如下形式调用

CreateFile:

hDevice=CreateFile("///.//X:",/* X 代表设备的驱动器字母

*/0,FILE_SHARE_WRITE,

NULL,OPEN_EXISTING,0,NULL);

你也可以通过以下形式调用CreateFile来获得指向一个物理硬盘的句柄:

hDevice=CreateFile("///.//PhysicalDriveN",/*

N代表用户系统上的一个硬盘,系统第

一硬盘是驱动器0 */0,FIEL_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);

dwIoControlCode参数指定想送给设备的命令,取以下值:

命令标识符 含义

FSCTL_DISMOUNT_VOLUME 卸下磁盘

FSCTL_LOCK_VOLUME 锁住磁盘

FSCTL_UNLOCK_VOLUME 解锁磁盘

IOCTL_DISK_CHECK_VERIFY 检查一个可拆除介质设备的变化

IOCTL_DISK_EJECT_MEDIA 从一个SCSI设备中弹出介质

IOCTL_DISK__FORMAT_TRACKS 格式化一个连续的磁道集

IOCTL_DISK_GET_DRIVE_GEOMETRY 获得物理磁盘的几何信息

IOCTL_DISK_GET_DRIVE_LAYOUT 提供关于磁盘上每一分区的信息

IOCTL_DISK_GET_MEDIA_TYPES 获得介质支持的信息

IOCTL_DISK_GET_PARTITION_INFO 获得磁盘分区的信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值