![]() |
|
DECLARE INTEGER GetVolumeInformation IN Win32api AS GetVolInfo ;
STRING lpRootPathName ,STRING lpVolumeNameBuffer,INTEGER nVolumeNameSize,;
INTEGER @lpVolumeSerialNumber, INTEGER @lpMaximumComponentLength ,;
INTEGER @lpFileSystemFlags , STRING lpFileSystemNameBuffer,;
INTEGER nFileSystemNameSize
STORE 0 TO VolSerialNum,MaxComLen,FSysFlag,IngRetVal
VolLabel = REPLACE(CHR(0),255)
FSysNameBuf= REPLACE(CHR(0),255)
IngRetVal = GetVolInfo (strDrive, @VolLabel, LEN(VolLabel), @VolSerialNum, @MaxComLen, @FSysFlag, @FSysNameBuf, LEN(FsysNameBuf) )
THISFORM.text3.VALUE=TRIM(VolLabel)/p>
&&磁盘卷标
THISFORM.text4.VALUE= VolSerialNum
&&磁盘序列号
THISFORM.text5.VALUE=TRIM(FSysNameBuf)
&&文件系统FAT、FAT32、NTFS、CDFS等
THISFORM.text7.VALUE= MaxComLen
&&文件名成分长度
下面的代码判断文件系统名称及卷特性
※ FSysFlag装载了一个或多个二进制位标志,以下是这些标志位的意义
FS_Case_Is_Preserved=0x0002
&&文件名的大小写保持写入时的状态
FS_Case_Sensitive=0x0001 /p>
&&文件名中要区别大小写
FS_Unicode_Stor_On_Disk=0x0004
&&文件名支持Unicode格式
FS_Persistent_ACLS=0x0008
&&文件系统支持访问控制列表(ACL)安全机制
FS_File_Compression=0x0010
&&文件系统支持逐文件地进行文件压缩
FS_Vol_Is_Preserved=0x8000
&&整个磁盘卷都是压缩的
FSysFtmp=“”
FSysFtmp=iif(bitand(FSysFlag,FS_Case_Is_Preserved)>0,FSysFtmp+“文件名的大小写保持写入时的状态”+chr(13),FSysFtmp)
FSysFtmp=iif(bitand(FSysFlag,FS_Case_Sensitive)>0,FSysFtmp+“文件名中要区别大小写”+chr(13),FSysFtmp)
FSysFtmp=iif(bitand(FSysFlag,FS_Unicode_Stor_On_Disk)>0,FSysFtmp+“文件名支持为Unicode格式”+chr(13),FSysFtmp)
FSysFtmp=iif(bitand(FSysFlag,FS_Persistent_ACLS)>0,FSysFtmp+“文件系统支持ACL安全机制”+chr(13),FSysFtmp)
FSysFtmp=iif(bitand(FSysFlag,FS_File_Compression)>0,FSysFtmp+“文件系统支持逐文件地进行文件压缩”+chr(13),FSysFtmp)
FSysFtmp=iif(bitand(FSysFlag ,FS_Vol_Is_Preserved)>0,FSysFtmp+“整个磁盘卷都是压缩的”+chr(13),FSysFtmp)
THISFORM.text6.VALUE=FSysFtmp
获取磁盘组织信息
DECLARE INTEGER GetDiskFreeSpace IN Win32api;
STRING lpRootPathName,INTEGER @lpSectorsPerCluster,;
NTEGER @lpBytesPerSector,INTEGER @lpNumberOfFreeClusters,;
INTEGER @lpTtoalNumberOfClusters
STORE 0 TO SectorsPerCluster, BytesPerSector, NumberOfFreeClusters, TotalClusters
INGRETVAL = GetDiskFreeSpace(strDrive, @SectorsPerCluster, @BytesPerSector, @NumberOfFreeClusters, @TotalClusters)
IF INGRETVAL <> 0
THISFORM.text8.VALUE=SectorsPercluster
THISFORM.text9.VALUE=BytesPerSector
THISFORM.text10.VALUE
=NumberofFreeClusters
THISFORM.text11.VALUE=Totalclusters
THISFORM.DskFreeSpace.VALUE= SectorsPerCluster * BytesPerSector * NumberOfFreeClusters && 磁盘剩余空间
THISFORM.DskTotalSpace.VALUE = SectorsPerCluster * BytesPerSector *TotalClusters
** 磁盘总空间
ENDIF
[1] [2]