Vbs 脚本编程简明教程——FSO 中文件的基本操作
一、文件属性:
在 windows 中,文件的属性一般用数字来表示:
0 | 代表 normal,即普通文件未设置任何属性。 |
1 | 代表只读文件。 |
2 | 代表隐藏文件。 |
4 | 代表系统文件。 |
16 | 代表文件夹或目录。 |
32 | 代表存档文件。 |
1024 | 代表链接或快捷方式。 |
2048 | 压缩文件,只读。 |
Set fso = WScript.CreateObject("Scripting.filesystemobject")
Set f = fso.GetFile("D:\DownLoad\SilkTest入门指南.doc")
Select Case f.Attributes' attributes 函数的作用是显示文件属性
Case 0
MsgBox "普通文件,没有设置任何属性。"
Case 1
MsgBox "只读文件,可读写。"
Case 2
MsgBox "隐藏文件,可读写。"
Case 4
MsgBox "系统文件,可读写。"
Case 16
MsgBox "文件夹或目录,只读。"
Case 32
MsgBox "上次备份后已更改的文件,可读写。"
Case 1024
MsgBox "链接或快捷方式,只读。"
Case 2048
MsgBox "压缩文件,只读。"
Case Else
MsgBox "未知属性。"
End Select
需要说明的是:msgbox 显示的结果往往不是上面说明的数字,而是有关属性代表数字的和。二、创建文件:
object.createtextfile 方法, 注意创建前一般需要检查文件是否存在。
Dim fso,filePath,f
filePath = "D:\Test.txt"
Set fso = WScript.CreateObject("Scripting.filesystemobject")
If (fso.FileExists(filePath)) Then
WScript.Echo "该文件已经存在,执行先删除,后创建!"
fso.DeleteFile filePath,True
Set f = fso.CreateTextFile(filePath,True,True)'"D:\Test.txt"为可覆盖的Unicode文件
f.Write("After the first remove created!")
f.Close
Else
Set f = fso.CreateTextFile(filePath,True,True)'"D:\Test.txt"为可重写的Unicode文件
f.WriteLine("This is a test!Directly to create!")
f.Close()
End If
如需要强制覆盖已存在的文件,则在文件名后加 true 参数。具体详见
CreateTextFile
三、复制、移动、删除文件:
使用 copyfile 方法、movefile 方法、deletefile 方法。例如:
Dim fso,sourfilePath,desFilePath,desFoldPath,desFold
sourfilePath = "D:\Test.txt"
desFilePath = "D:\Temp\Test.txt"
desFold = "D:\Temp"
desFoldPath = "D:\Temp1"
Set fso = WScript.CreateObject("Scripting.filesystemobject")
If (fso.FileExists(sourfilePath)) Then
WScript.Echo sourfilePath & "文件已经存在"
Else
fso.CreateTextFile sourfilePath,True,True '新建文本文件
End If
If (fso.FolderExists(desFold)) Then
WScript.Echo desFold & "文件夹已经存在"
Else
fso.CreateFolder desFold '新建文件夹
End If
If (fso.FolderExists(desFoldPath)) Then
WScript.Echo desFoldPath & "文件夹已经存在"
Else
fso.CreateFolder desFoldPath
End If
fso.CopyFile sourfilePath,desFilePath,True 'true 代表强制覆盖
fso.MoveFile sourfilePath,desFoldPath & "\" '移动文件
fso.DeleteFile desFilePath,True '删除文件
fso.DeleteFolder desFold,True '删除文件夹
fso.DeleteFolder desFoldPath,True
四、文件的读写:
1、打开文件:使用 opentextfile 方法
Set fso = WScript.CreateObject("Scripting.filesystemobject")
fso.OpenTextFile "D:\Test.txt",1,True,-1 '以只读Unicode,在文件不存在时创建新文件的方式打开文件
2、读取文件:read(x) 读 x 个字符;readline读一行;readall全部读取
On Error Resume Next
Set fso = WScript.CreateObject("Scripting.filesystemobject")
Set ffile = fso.OpenTextFile ("D:\Test.txt",1,True,-2)
value = ffile.Read(20)
line = ffile.ReadLine '注意别让程序直接把文本中的内容读完了,那么在ReadAll就会报错
If Err.Number<>0 Then
WScript.Echo Err.Number & Err.Description &Err.Source
End if
contents = ffile.ReadAll
WScript.Echo chr(10) & "value=" & value & Chr(10) & "line=" & line & Chr(10) & "contents=" & contents
3、常见的指针变量:
atendofstream 属性:当处于文件结尾的时候这个属性返回 true。一般用循环检测是否到达文件末尾。
atendofline 属性:如果已经到了行末尾,这个属性返回 true。
Column 属性(当前字符位置的列号)和 line 属性(文件当前行号):在打开一个文件后,行和列指针都被设置为 1。
On Error Resume Next
Set fso = WScript.CreateObject("Scripting.filesystemobject")
Set ff = fso.OpenTextFile("D:\Test.txt",1,True,-2)
If Err.Number<>0 Then
WScript.Echo Err.Number & Err.Description & Err.Source & Chr(10)
End If
WScript.Echo ff.Line & "行" & ff.Column & "列" '显示打开文件时行列指针所指向的行列号
Do While ff.AtEndOfStream<>True
WScript.Echo ff.Read(10)
Loop
ff.Close '关闭文件
4、在文件中跳行:skip(x) 跳过 x 个字符;skipline 跳过一行
On Error Resume Next
Set fso = WScript.CreateObject("Scripting.filesystemobject")
Set ff = fso.OpenTextFile("D:\Test.txt",1,True,-2)
Do While ff.AtEndOfStream<>True
WScript.Echo ff.ReadLine
ff.SkipLine
ff.Skip(3) '跳过3个汉字或者3个字符
Loop
ff.Close
运行结果这里我就不截图了,因为我用的是很长的文章O(∩_∩)O
5、在文件中写入字符:可以用 2-写入和 8-追加的方式来写入其方法有:write(x)写入 x 字符串;writeline(x)写入 x 代表的一行writeblanklines(n) 写入 n 个空行
Set fso = WScript.CreateObject("Scripting.filesystemobject")
Set ff = fso.OpenTextFile("D:\Test.txt",2,True,-2) '覆盖方式打开
ff.Write("这是覆盖写入的字符串")
ff.Write vbCrLf '更多关于这类的常量请参见<a target=_blank href="http://blog.youkuaiyun.com/suifenghuidong/article/details/37886365">VB中字符串常数</a>
'ff.Write Chr(13) & Chr(10) '效果和上条语句一样
ff.Close
Set ff = fso.OpenTextFile("D:\Test.txt",8,True,-2) '追加形式打开
ff.Write("这是追加写入的字符串")
ff.WriteLine("WriteLine")
ff.Write("测试")
ff.WriteBlankLines(3) '写入三个空行,即三次回车换行,在上一行未结束时产生效果是空两行
ff.Write("测试")
ff.Close
注意:最后一定要使用 close 方法关闭文件。读文件后一定要关闭,才能以写的方式打开。