Excel-VBA操作文件四大方法之四--利用API函数来处理文件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Excel-VBA操作文件四大方法之四四、利用API函数来处理文件通过前面三种方法的介绍,你是否已经觉得足够了?是的,前面的方法完全可以应付几乎所有的文件操作。但是为了普及一下API,展示一下API的魅力,最后向大家介绍一下如何利用API函数来处理文件。另一方面也是本人对API情有独钟,为她做一下广告,呵呵。大家对API的强大也是有所耳闻了,在文件操作方面,API自然毫不逊色。说明:为了文章简洁,我们先给出API函数的名称及功能,其完整的声明及常数就不再一一细诉,只在示例中给出其完整用法。(一)处理驱动器及目录下面是windows中提供的对于目录进行操作的API函数及其功能:CreateDirectory,CreateDirectoryEx创建一个新目录GetCurrentDirectory在一个缓冲区中装载当前目录GetDiskFreeSpace,GetDiskFreeSpaceEx获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量GetDriveType判断一个磁盘驱动器的类型GetFullPathName获取指定文件的完整路径名GetLogicalDrives判断系统中存在哪些逻辑驱动器字母GetLogicalDriveStrings获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径GetSystemDirectory这个函数能取得Windows系统目录(System目录)的完整路径名。在这个目录中,包含了所有必要的系统文件。根据微软的标准,其他定制控件和一些共享组件也可放到这个目录。通常应避免在这个目录里创建文件。在网络环境中,往往需要管理员权限才可对这个目录进行写操作GetTempPath获取为临时文件指定的路径GetVolumeInformation获取与一个磁盘卷有关的信息GetWindowsDirectory这个函数能获取Windows目录的完整路径名。在这个目录里,保存了大多数windows应用程序文件及初始化文件RemoveDirectory删除指定目录SetCurrentDirectory设置当前目录SetVolumeLabel设置一个磁盘的卷标(Label)下面通过几个例子来详细的了解一下其中主要的几个函数及其用法:1、GetLogicalDrives作用:判断系统中存在哪些逻辑驱动器字母声明:DeclareFunctionGetLogicalDrivesLibkernel32AliasGetLogicalDrives()AsLong说明:此函数的返回值类型为Long,这个结构中的二进制位标志着存在哪些驱动器。其中,位0设为1表示驱动器A:存在于系统中;位1设为1表示存在B:驱动器;以次类推示例:PublicSubGet_LogicalDrives()DimLDsAsLong,CntAsLong,sDrivesAsStringLDs=GetLogicalDrivessDrives=Availabledrives:ForCnt=0To25If(LDsAnd2^Cnt)0ThensDrives=sDrives++Chr$(65+Cnt)EndIfNextCntMsgBoxsDrivesEndSub上面的示例中,我们通过二进制运算,将返回值转换成字符。如果你的机上有C,D,E,F,G,H这几个驱动器,那么LDs的值就是252,转成二进制为11111100,从右往左,依次代表A,B,C,D,...,为0的说明没有此驱动器字母。大家可以自己试一试。2、GetDriveType作用:判断一个磁盘驱动器的类型声明:DeclareFunctionGetDriveTypeLibkernel32AliasGetDriveTypeA(ByValnDriveAsString)AsLong说明:此函数的返回值类型为Long,如驱动器不能识别,则返回零。如指定的目录不存在,则返回1。如执行成功,则用下述任何一个常数指定驱动器类型:DRIVE_REMOVABLE(表示磁盘可以从驱动器上移走,通常是软驱),DRIVE_FIXED(磁盘不能从驱动器上移走,通常为本地硬盘),DRIVE_REMOTE(驱动器是远程网络驱动器),DRIVE_CDROM(驱动器是CD-ROM驱动器)或DRIVE_RAMDISK(驱动器是RAM驱动器)参数为String类型,包含了驱动器根目录路径的一个字串此函数的功能与FSO的Drive对象的DriveType属性是一样的。示例:\'定义常数变量PrivateConstDRIVE_CDROM=5\'表示光盘驱动器PrivateConstDRIVE_FIXED=3\'表示硬盘驱动器PrivateConstDRIVE_RAMDISK=6\'表示RAM驱动器PrivateConstDRIVE_REMOTE=4\'表示网络驱动器PrivateConstDRIVE_REMOVABLE=2\'表示软盘驱动器PrivateSubGet_DriveType()DimtempAsLongtemp=GetDriveType(d:\\)\'取的d:盘驱动器类型SelectCasetempCaseDRIVE_CDROMMsgBoxDRIVE_CDROM:光盘驱动器CaseDRIVE_FIXEDMsgBoxDRIVE_FIXED:硬盘驱动器CaseDRIVE_RAMDISKMsgBoxDRIVE_RAMDISK:RAM驱动器CaseDRIVE_REMOTEMsgBoxDRIVE_REMOTE:网络驱动器CaseDRIVE_REMOVABLEMsgBoxDRIVE_REMOVABLE:软盘驱动器EndSelectEndSub3、GetDiskFreeSpaceEx作用:获取与一个磁盘的组织以及剩余空间容量有关的信息声明:DeclareFunctionGetDiskFreeSpaceExLibkernel32AliasGetDiskFreeSpaceExA(ByVallpRootPathNameAsString,lpFreeBytesAvailableToCallerAsLARGE_INTEGER,lpTotalNumberOfBytesAsLARGE_INTEGER,lpTotalNumberOfFreeBytesAsLARGE_INTEGER)AsLong说明:此函数的返回值类型为Long,非零表示成功,零表示失败。会设置GetLastError.在采用FAT16格式的windows95系统中,如一个驱动器(分区)的容量超过了2GB,则不应使用这个函数。此时,这个函数能识别的最大分区容量只有2GB参数说明:lpRootPathNameString,不包括卷名的磁盘根路径名lpFreeBytesAvailableToCallerLARGE_INTEGER,指定一个变量,用于容纳调用者可用的字节数量lpTotalNumberOfBytesLARGE_INTEGER,指定一个变量,用于容纳磁盘上的总字节数lpTotalNumberOfFreeBytesLARGE_INTEGER,指定一个变量,用于容纳磁盘上可用的字节数LARGE_INTEGER结构用来代表一个64位带符号的整数值,它的定义如下:TypeLARGE_INTEGER\'8ByteslowpartAsLonghighpartAsLongEndType其中lowpart为Long,指定低32位,highpart为Long,指定高32位。示例:虽然此函数能识别的最大分区容量只有2GB,但通过调整,对大于2G的仍然能得出正确容量。以下的调整公式是本人通过逆向推算出来的,至于其中的原理也不是很清楚,大家可一测试一下。PrivateSubGet_DiskFreeSpaceEx()DimtempAsLong,Dms$Dimtempa,tempb,tempcDimRootPathNameAsStringDimFreeBytesAvailabletoCallerAsLARGE_INTEGERDimTotalNumberOfBytesAsLARGE_INTEGERDimTotalNumberOfFreeBytesAsLARGE_INTEGERRootPathName=d:\'取得磁盘空间temp=GetDiskFreeSpaceEx(RootPathName,FreeBytesAvailabletoCaller,TotalNumberOfBytes,TotalNumberOfFreeBytes)Dms=Dms+磁盘容量:+vbCrLftempa=TotalNumberOfBytes.highpart*2^32+IIf(TotalNumberOfBytes.lowpart0,TotalNumberOfBytes.lowpart,TotalNumberOfBytes.lowpart+2^32)\'计算容量Dms=Dms+CStr(tempa)+字节+vbCrLftempa=Format(tempa/1024/1024/1024,0.00)Dms=Dms+tempa+G+vbCrLf\'取得磁盘可用空间Dms=Dms+磁盘可用空间:+vbCrLftempb=TotalNumberOfFreeBytes.highpart*2^32+IIf(TotalNumberOfFreeBytes.lowpart0,TotalNumberOfFreeBytes.lowpart,TotalNumberOfFreeBytes.lowpart+2^32)\'计算Dms=Dms+CStr(tempb)+字节+vbCrLftempb=Format(tempb/1024/1024/1024,0.00)Dms=Dms+tempb+G+vbCrLf\'取得磁盘已用空间Dms=Dms+磁盘已用空间:+vbCrLftempc=tempa-tempbDms=Dms+CStr(tempc)+G+vbCrLfMsgBoxDmsEndSub4、CreateDirectory,CreateDirectoryEx作用:创建一个新目录声明:DeclareFunctionCreateDirectory&Libkernel32AliasCreateDirectoryA(ByVallpNewDirectoryAsString,lpSecurityAttributesAsSECURITY_ATTRIBUTES)DeclareFunctionCreateDirectoryEx&Libkernel32AliasCreateDirectoryExA(ByVallpTemplateDirectoryAsString,ByVallpNewDirectoryAsString,lpSecurityAttributesAsSECURITY_ATTRIBUTES)说明:此函数的返回值类型为Long,非零表示成功,零表示失败。会设置GetLastError参数说明:lpTemplateDirectoryString,指定一个模板目录的名字,从中复制默认属性(比如目录中文件的默认压缩方式)。如设为vbNullString,则表示不使用模板lpNewDirectoryString,新目录的名字lpSecurityAttributesSECURITY_ATTRIBUTES,这个结构定义了目录的安全特性——如果操作系统支持的话示例:PrivateSubCreate_Directory()DimSecurityAsSECURITY_ATTRIBUTES\'创建目录Ret&=CreateDirectory(C:\\Directory,Security)\'若返回0,则失败。IfRet&=0ThenMsgBoxError:创建失败!,vbCritical+vbOKOnlyEndSub5、RemoveDirectory作用:移除一个目录声明:DeclareFunctionRemoveDirectoryLibkernel32AliasRemoveDirectory

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功