CBA
createfile失败(VBA操作文件四大方法「3」)
VBA操作文件四大方法「3」nerror="javascript:errorimg.call(this);">

FileSystemObject对象模型,是微软提供的专门用来访问计算机文件系统的,具有大量的属性、方法和事件。其使用面向对象的“object.method”语法来处理文件夹和文件,使用起来十分方便(需Office 2000以后版本)。FileSystemObject并不是VBA的一部分,它是以一个COM组件的形式提供的。因此,要使用先要创建FileSystemObject对象。

oFileSystemObject 主对象,包含用来创建、删除和获得有关信息,以及用来操作驱动器、文件夹和文件的方法和属性。

oDrives 集合,提供驱动器的列表,这些驱动器以实物或在逻辑上与系统相连接。Drives集合包括所有驱动器,与类型无关。

oFiles 集合,提供包含在文件夹内的所有文件的列表。

oFolders 集合,提供包含在文件夹内的所有文件夹的列表。


要使用FileSystemObject对象,先要创建它。创建FileSystemObject对象要使用CreatObject函数。CreateObject 函数用来创建并返回一个对 ActiveX 对象的引用。

class 是要创建的应用程序名称和类。

class 参数使用 appname.objecttype 这种语法,包括以下部分:

objecttype 必需的;待创建对象的类型或类。

Dim fso As Object

scripting是类型库的名称,FileSystemObject就是要创建的对象的名字。

Dim d


FileSystemObject对象模型中有些功能是重复的,如可用FileSystemObject对象的CpoyFile方法,也可用File对象的Copy方法来复制文件。下面先介绍FileSystemObject对象的方法。

语法:object.GetDrive drivespec

作用:返回一个与指定路径中的驱动器相对应的 Drive 对象。

Dim d

如果 drivespec 不符合任何一种可以接受的形式或者不存在,则发生一个错误。

2、GetDriveName 方法

作用:返回一个包含指定路径的驱动器名字的字符串。

Debug.Print fso.GetDriveName("c:\test.txt") '立即窗口显示"c:"

语法:object.GetExtensionName(path)

作用:返回一个包含路径中最后部件扩展名的字符串。

Debug.Print fso.GetExtensionName("c:\test.txt") '立即窗口显示"txt"

4、GetbaseName 方法

作用:返回一个包含路径中最后部件的基本名字(去掉任何文件扩展名)的字符串。

Debug.Print fso.GetbaseName("c:\abc\test.txt") '立即窗口显示"test"

语法:object.GetAbsolutePathName(pathspec)

作用:从提供的路径说明中返回一个完整、明确的路径。

如果pathspec为空字符串"",则返回当前路径。假设当前路径为C:\documents and Settings\yc\My documents

Debug.Print fs.GetAbsolutePathName("") '显示C:\documents and Settings\yc\My documents

Debug.Print fs.GetAbsolutePathName("abc") '显示C:\documents and Settings\yc\My documents\abc

6、GetFile 方法

作用:返回一个和指定路径中文件相对应的 File 对象。

Dim f

注意:如果指定的文件不存在,则发生一个错误。

语法:object.GetFileName(pathspec)

作用:返回指定路径中的最后部件,该路径不是驱动器说明的一部分。

Debug.Print fso.GetFileName("c:\abc\test.txt") '立即窗口显示"test.txt"

8、GetFolder 方法

作用:返回一个和指定路径中文件夹相对应的 Folder 对象。

Dim fd

注意:如果指定的文件夹不存在,则发生一个错误。

语法:object.GetSpecialFolder(folderspec)

说明:

WindowsFolder 0 Windows 文件夹,包含由 Windows 操作系统安装的文件。

TemporaryFolder 2 Temp 文件夹,用于存储临时文件。它的路径在 TMP 环境变量中。

语法:object.GetParentFolderName(path)

作用:返回一个包含指定路径最后部件父文件夹名字的字符串。

Debug.Print fso.GetParentFolderName("c:\tmp\test.txt") '显示"c:\tmp"

11、GetTempName 方法

作用:返回一个随机产生的临时文件或文件夹的名字,该名字在执行需要临时文件或文件夹的操作时有用。

说明:GetTempName 方法不产生一个文件,它仅提供一个临时文件名字,该名字可被 CreateTextFile 用于创建一个文件。

Debug.Print fso.GetTempName '显示"radB0208.tmp",每次都会变。

12、BuildPath 方法

作用:追加一个名字到一个已经存在的路径。

Debug.Print fso.BuildPath("c:\tmp", "abc") '显示"c:\tmp\abc"

语法:object.CreateFolder(foldername)

注意:如果指定的文件夹已经存在,则发生一个错误。

fso.CreateFolder("c:\myfolder") '在C盘创建一个myfolder文件夹

语法:object.CopyFolder source, destination[, overwrite]

destination 必需的。指明 source 中被复制文件夹和子文件夹的接受端的字符串,不允许有通配符。

作用:复制一个文件夹到另一个地方。

① 通配符仅可用于 source 参数的最后一个路径部件。

但不能这样:fso.CopyFolder "c:\mydocuments\*\*", "c:\tempfolder\"

例如:fso.copyfolder "c:\tmp", "f:\abc\"

假如写成这样:fso.copyfolder "c:\tmp", "f:\abc"

③如果 destination 是一个已存在的文件,则发生一个错误。

⑤如果 destination 是一个只读目录,当尝试去复制一个已存在的只读文件到此目录并且 overwrite为 False 时,则发生一个错误。

⑦CopyFolder 方法停止在它遇到的第一个错误上,之前所做的操作是不会消失的,所以要注意。

语法:object.MoveFolder source, destination

作用:将一个或多个文件夹从一个地方移动到另一个地方。

①只有在操作系统支持的情况下,这个方法才允许文件夹在卷之间移动。Windows是不允许的,将C盘的文件夹移到D盘是不行的。

③如果 destination 是一个已存在的文件,则发生一个错误。

例如:

⑤如果 source 不存在或使用的通配符不能和任何文件夹匹配,也发生一个错误。

16、DeleteFolder 方法

folderspec 必需的。要删除的文件夹的名字。 Folderspec 可以在最后的路径部件中包含通配符。

作用:删除一个指定的文件夹和它的内容。

说明:如果没有发现相匹配的文件夹,则发生一个错误。DeleteFolder 方法停止在它遇到的第一个错误上,不要尝试回卷或撤消错误发生前所做的任何改变。

fso.DeleteFolder("c:\tmp")

17、FolderExists 方法

作用:如果指定的文件夹存在返回 True,不存在返回 False。

语法:object.DriveExists(drivespec)

19、FileExists 方法

作用:如果指定的文件存在,返回 True,若不存在,则返回 False。

语法:object.CreateTextFile(filename[, overwrite[, unicode]])

unicode 可选的。Boolean 值,表示文件是作为一个 Unicode 文件创建的还是作为一个ASCII 文件创建的。如果作为一个 Unicode 文件创建,其值为 True,作为一个 ASCII 文件创建,其值为 False。如果省略的话,则认为是一个 ASCII 文件。

作用:创建一个指定的文件名并且返回一个用于该文件读写的 TextStream 对象。

Dim f

Set f = fso.CreateTextFile("c:\testfile.txt", True)

语法:object.OpenTextFile(filename[, iomode[, create[, format]]])

作用:打开一个指定的文件并返回一个 TextStream 对象,该对象可用于对文件进行读、写、追加操作。

oiomode 参数可为下面设置值中的任何值:

ForReading 1 打开一个只读文件,不能对此文件进行写操作。

ForAppending 8 打开一个文件并写到文件的尾部。

ocreate 可选的,它表示如果指定的 filename 不存在是否可以创建一个新文件。如果创建新文件,其值为 True。若不创建文件其值为 False。缺省值为 False。

TristateUseDefault –2 使用系统缺省打开文件。

TristateFalse 0 以 ASCII 格式打开文件。

Dim f

或者:

Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)

22、CopyFile 方法

作用:把一个或多个文件从一个地方复制到另一个地方。

说明:需要注意的地方与CopyFolder是完全类似的。

fso.copyfile "c:\testfile.txt", "f:\abc\" '若abc不存在则出错。

fso.copyfile "c:\testfile.txt", "f:\abc" '若abc不存在则复制testfile.txt到F盘文件名变为abc,若abc存在,出错,因为是一个目录。

语法:object.MoveFile source, destination

说明:需要注意的地方与MoveFolder是完全类似的。

语法:object.DeleteFile filespec[, force]

说明:force 可选的。如果要删除具有只读属性设置的文件,其值为 True。如果其值为 False (缺省),则不能删除具有只读属性设置的文件。

可以利用Drive对象来获取有关各种驱动器的信息,Drive对象的属性有:

AvailableSpace 属性 驱动器的可用空间容量,以字节为单位。

对于支持限额的计算机系统来说,二者之间可能有所不同。

DriveType 属性 驱动器的类型。如"Removable"、"Fixed"、"Network"、"CD-ROM"、"RAM Disk"

FileSystem 属性 驱动器所使用的文件系统类型。如FAT、FAT32、NTFS、以及 CDFS。

ShareName 属性 驱动器的网络共享名。

Path 属性 驱动器的路径。C 驱动器的路径是 C:,而不是 C:\。

这些属性的使用都十分简单,直接用“对象.属性”就可以了。在使用前要先用GetDrive获得一个Drive对象,注意不能创建一个驱动器对象。下面举个例子:

Dim fs, d, s

Set d = fs.Getdrive(fs.GetDriveName(drvPath))

s = s & d.VolumeName & vbCrLf

s = s & " Kbytes"

End Sub

(四)处理文件夹

可以利用Folder对象来获取有关文件夹的信息,Folder对象的属性有:

Normal 0 一般文件。未设置属性。

Hidden 2 隐藏文件。属性为读/写。

Volume 8 磁盘驱动器卷标。属性为只读。

Archive 32 自上次备份后已经改变的文件。属性为读/写。

Compressed 128 压缩文件。属性为只读。

ShortName 属性 较早的 8.3 命名约定的程序所使用的短名字。

Files 属性 所有 File 对象组成的 Files 集合,这些 File 对象包含在指定的文件夹中

Drive 属性 文件夹所在的驱动器符号。

ParentFolder 属性 文件夹的父文件夹对象。

Path 属性 文件夹的路径。

Size 属性 文件夹的大小,以字节为单位。

DateLastModified 属性 最后一次修改文件夹的日期和时间。

属性的使用和Drive对象是一样的,可以用GetFolder获取一个Folder对象,也可以用FileSystemObject对象的CreateFolder 方法创建一个Folder对象。

⑴Copy 方法

作用:把一个指定的文件夹从一个地方复制到另一个地方。

⑵Move 方法

作用:将一个指定的文件夹从一个地方移动到另一个地方。

⑶Delete 方法

作用:删除一个指定的文件夹。

⑷CreateTextFile 方法

作用:与FileSystemObject对象的CreateTextFile 方法是一样的。

Set fd = fs.getfolder("c:\tmp")

可在C盘tmp文件夹下创建testfile.txt文件。

(五)处理文件

可以利用File对象来获取有关文件的信息,File对象的属性和Folder的属性是完全一样的,只是少了Files 属性、IsRootFolder 属性、SubFolders 属性这3个属性。这里就不列了。

⑴Copy 方法

⑶Delete 方法

⑷OpenAsTextStream 方法

作用:打开一个指定的文件并返回一个 TextStream 对象,该对象可用来对文件进行读、写、追加操作。

说明:此方法与FileSystemObject对象的 OpenTextFile 方法相同的功能。参数也是一致的。

(六)处理文本文件

1、打开或创建文本文件

创建文件可以使用FileSystemObject对象的 CreatTextFile 方法或在OpenTextFile 方法中将iomode参数设为ForWriting=2,create参数设为True。

Set f = fso.OpenTextFile("c:\test1.xls", 2, True) '如果不存在test1.xls将自动创建。

打开文件后,将返回一个TextStream 对象,我们可以利用TextStream 对象的属性及方法来对文件进行读写操作。

oAtEndOfLine 属性 文件指针是否正好在行尾标记的前面

oColumn 属性 TextStream 文件中当前字符位置的列号

利用TextStream 对象读取文件有三种方法。

语法:object.Read(characters)

功能:从一个 TextStream 文件中读取指定数量的字符并返回得到的字符串。

Sub du()

Const ForReading = 1

Set a = fso.OpenTextFile("c:\testfile.txt", ForReading, False)

Do While a.AtEndOfLine <> True '是否到行末

Loop

Debug.Print retstring '可看到读取了第一行的字符

oReadLine 方法

功能:从一个 TextStream 文件读取一整行(到换行符但不包括换行符)并返回得到的字符串。

Sub du_line()

Const ForReading = 1

Set a = fso.OpenTextFile("c:\testfile.txt", ForReading, False)

retstring = a.ReadLine '读取一行

Loop

End Sub

语法:object.ReadAll

说明:对于大的文件,使用ReadAll方法浪费内存资源。应使用其它的技术去输入一个文件,比如按行读取文件。

Sub du_all()

Const ForReading = 1

Set a = fso.OpenTextFile("c:\testfile.txt", ForReading, False)

Debug.Print retstring

End Sub

oSkip 方法

功能:当读一个 TextStream 文件时跳过指定数量的字符。

Sub duskip()

Const ForReading = 1

Set a = fso.OpenTextFile("c:\testfile.txt", ForReading, False)

Do While a.AtEndOfLine <> True '是否到行末

a.Skip (1) '跳过一个字符

Loop

Debug.Print retstring '可看到读取了第一行的奇数位的字符

oSkipLine 方法

功能:当读一个 TextStream 文件时跳过下一行。

3、写入数据到文件

oWrite 方法

功能:写一个指定的字符串到一个 TextStream 文件。

Sub xie()

Dim fs, f

Set f = fs.OpenTextFile("c:\testfile.txt", ForAppending,TristateFalse)

f.Close

oWriteLine 方法

功能:写入一个指定的字符串和换行符到一个 TextStream 文件中。

f.WriteLine("Hello world!") '写入字符串,加一个换行符。

语法:object.WriteBlankLines(lines)

功能:写入指定数量的换行符到一个 TextStream 文件中。

f.WriteBlankLines(3) '相当于按3次回车。

4、关闭文件

利用TextStream 对象的Close方法,上面的示例中已经有了,很简单。


顶一下()     踩一下()

热门推荐

发表评论
0评