FileSystemObject (FSO)對象方法總結及應用
FileSystemObject (FSO)組件可以用來處理系統驅動器,文件夾,和文件。因為它是一個ActiveX控件,所以它能被js,vbs等文件使用,以實現對機器文件系統的操作。
下面將總結一下FSO中的對象和方法,其實FSO中大多數的方法都能顧名思義,很簡單,所以對於大多數函數都只是簡單的羅列一下。
一.新建FileSystemObject對象
var fso = new ActiveXObject("Scripting.FileSystemObject");
注意:FileSystemObject對象只能創建一次!
二.FileSystemObject對象下的相關函數
1.Driver相關:
DriveExists(drivespec):判斷驅動器是否存在,參數可以是"C","C:","C:\","\\computer\share"等形式
GetDrive ( drivespec ):獲取Driver對象,獲取后可以對該對象進行更進一步的操作,參數可以是"C","C:","C:\","\\computer\share"等形式
GetDriveName(path):獲取一個地址的驅動名,這個函數只關注path字符串,不關注該路徑是否存在
Drives屬性:獲取所有的driver
2.Folder相關:
FolderExists(folderspec):判斷Folder是否存在
CreateFolder(foldername):創建Folder,並返回Folder對象
GetFolder(folderspec):獲取Folder對象,獲取后可以對該對象進行更進一步的操作
DeleteFolder ( folderspec[, force] ):刪除Folder,默認情況下不會刪除只讀文件夾,但是可以通過將force設為true來刪除只讀文件夾.
CopyFolder ( source, destination[, overwrite] ):復制文件夾.當overwrite為true時會覆蓋原有的文件夾。有如下幾種復制方法。
a.當source只是一個簡單的路徑,且destination后面不以"\"結束時,將新建destination文件夾,並將source下的文件都拷貝到destination下。
filesys.CopyFolder("c:\\test1","c:\\test3");
拷貝test1下的文件到test3,如果test3文件夾不存在將先新建test3文件夾。
b.當source只是一個簡單的路徑,且destination后面以"\"結束時,將認為destination文件夾已經存在,並將source文件夾拷貝到destination下。
filesys.CopyFolder("c:\\test1","c:\\test2\\");
拷貝test1到test2文件夾下,如果test2文件夾不存在將報錯。
c.當source是通配符的形式,不管destination后面是否以"\"結束,都將認為destination文件夾已經存在,並將source代表的所有文件夾拷貝到destination下。
filesys.CopyFolder("c:\\test1\\*","c:\\test2\\");
拷貝test1下的所有文件夾(不包括文件)到test2文件夾下.
MoveFolder ( source, destination ):移動文件夾,用法參見CopyFolder函數.
3.File相關:
FileExists(filespec):判斷File是否存在
CreateTextFile(filename[, overwrite[, unicode]]):創建File對象並返回TextStream對象
OpenTextFile(filename[, iomode[, create[, format]]]):打開文件並返回TextStream對象
iomode的值為1時為只讀(默認),為2時為寫,為8時為append模式.值為-2時用系統默認的方式打開.為-1時按Unicode打開,為0是按ASCII打開.
GetFile(filespec):獲取File對象,獲取后可以對該對象進行更進一步的操作
DeleteFile ( filespec[, force] ):刪除File,默認情況下不會刪除只讀文件,但是可以通過將force設為true來刪除只讀文件
filesys.DeleteFile("c:\\test1\\*");將刪除test1目錄下所有文件
CopyFile ( source, destination[, overwrite] ):復制文件.當overwrite為true時會覆蓋原有的文件夾。有如下幾種復制方法。
a.當source只是一個簡單的路徑,且destination后面不以"\"結束時,將新建destination文件夾,並將source拷貝到destination下。
filesys.CopyFolder("c:\\test1\1.txt","c:\\test3.txt");
拷貝test1下的文件到test3,如果test3文件夾不存在將先新建test3文件夾。
b.當source只是一個簡單的路徑,且destination后面以"\"結束時,將認為destination文件夾已經存在,並將source文件夾拷貝到destination下。
filesys.CopyFolder("c:\\test1\1.txt","c:\\test2\\");
拷貝test1到test2文件夾下,如果test2文件夾不存在將報錯。
c.當source是通配符的形式,不管destination后面是否以"\"結束,都將認為destination文件夾已經存在,並將source代表的所有文件夾拷貝到destination下。
filesys.CopyFile("c:\\test1\\*","c:\\test2\\");
拷貝test1下的所有文件(不包括文件夾)到test2文件夾下.
MoveFile ( source, destination ):移動文件,用法參見CopyFile函數.
GetFileVersion(filespec):獲取文件的版本信息,大多數文件都沒有版本信息的,所以這個函數經常返回空字符串.
4.路徑的處理相關:
下面的一些函數除了GetSpecialFolder外都只是單純的字符串處理操作,並不關注相應的路徑或文件是否存在.
BuildPath(path, name):根據路徑和名字生成完整的路徑.
filesys.BuildPath("c:\\jingle","2" )將返回"c:\jingle\2"
GetAbsolutePathName(pathspec):根據相對路徑或模糊的路徑得到絕對路徑.絕對路徑的獲取和語句執行的當前路徑有關.
GetParentFolderName(path):獲取路徑的上級路徑,這個函數只關注path字符串,不關注該路徑是否存在
GetFileName(pathspec):根據路徑獲取文件名稱(包括后綴).
GetBaseName(path):獲取文件名(不包括后綴)
GetExtensionName(path):獲取文件后綴
GetTempName():生成以.tmp為后綴的臨時文件名
GetSpecialFolder(folderspec):用於獲取幾個特殊的系統目錄.參數0將獲取Windows目錄對象,1獲取System目錄對象,2獲取Temp目錄
對象
下面的例子將你的臨時文件的地址寫入testfile.txt中.
var fd = filesys.GetSpecialFolder(2);
var myfile = filesys.CreateTextFile("c:\\testfile.txt");
myfile.WriteLine(fd.Path);
myfile.close();
5.一個特殊的函數:
GetStandardStream(standardStreamType [, unicode ]):獲取相應的TextStream對象.參數為0是輸入流,1是輸出流,2是錯誤流.
這個函數在js腳本里面其實並不怎么用得上
三.Drive的屬性
AvailableSpace:獲取可用空間大小(bytes)
FreeSpace:同上,區別只在於在某些系統下顯示的格式不一樣
TotalSize:獲取總大小(bytes)
DriveLetter:Drive的相應字符,network drive將返回空字符串
DriveType:0未知,1:Removable,2:Fixed,3: Network,4:CD-ROM,5:RAM Disk
IsReady:對Removable和CD-ROM來說只有相應的設備可以訪問了才返回true,當該屬性為false時,很多其他屬性無法獲取
Path:路徑
FileSystem:返回FAT, NTFS, and CDFS等值
RootFolder:返回Driver所代表的路徑的Folder對象。
SerialNumber:返回SerialNumber,這個屬性主要用來確保插入了正確的removable media
ShareName:返回network drive的路徑
VolumeName:返回VolumeName信息,VolumeName就是咱自己對盤符定義的名字
四.Folder的方法和屬性
Folder的方法有Copy,Delete,Move,CreateTextFile這些方法的用法分別參見
FileSystemObject.CopyFolder,FileSystemObject.DeleteFolder,FileSystemObject.MoveFolder,FileSystemObject.CreateTextFil
e方法。
Attributes:文件夾的屬性.將返回下面數值的或值.
0:Normal
1:ReadOnly可設
2:Hidden可設
4:System可設
8:Volumn
16:Directory是否是文件夾
32:Achive即文件在上次備份后被改動過,可設
1024:Alias是否是鏈接或快捷方式
2048:Compressed是否被壓縮
DateCreated:創建時間
DateLastAccessed:最后訪問時間
DateLastModified:最后修改時間
Drive:文件夾所在的Driver letter
Files:文件夾下的所有文件,不包括文件夾,可用Count屬性得到其文件數,用Item依次進行訪問。
SubFolders:文件夾下所有的子文件夾,可用Count屬性得到其文件夾數,用Item依次進行訪問。
Type:文件夾類型,一般都是"File Folder",有些特殊的文件夾類型為"Folder"
Size:文件夾大小
Path:路徑
ParentFolder:父文件夾路徑
Name:文件夾名稱,可寫
ShortPath:返回8.3命名規則的短路徑
ShortName:返回8.3命名規則的短文件夾名稱
IsRootFolder:判斷是否是根文件夾
五.File的方法和屬性
Folder的方法有Copy,Delete,Move,OpenAsTextStream這些方法的用法分別參見FileSystemObject.CopyFile,FileSystemObject.DeleteFile,FileSystemObject.MoveFile,FileSystemObject.CreateTextFile方法。
Attributes:文件的屬性.將返回下面數值的或值.
0:Normal
1:ReadOnly可設
2:Hidden可設
4:System可設
8:Volumn
16:Directory是否是文件夾
32:Achive即文件在上次備份后被改動過,可設
1024:Alias是否是鏈接或快捷方式
2048:Compressed是否被壓縮
DateCreated:創建時間
DateLastAccessed:最后訪問時間
DateLastModified:最后修改時間
Drive:文件所在的Driver letter
Type:文件類型,文件類型是根據文件的后綴來判斷的,操作系統中儲存有文件后綴和文件類型的對應關系,根據文件的后綴就能得到文件類型,如果有的后綴找不到給定的文件類型,就直接用后綴來表示文件類型,比如文件后綴為.yy。則文件類型為YY File。
Size:文件大小
Path:路徑
ParentFolder:所在文件夾路徑
Name:文件名稱
ShortPath:返回8.3命名規則的短路徑
ShortName:返回8.3命名規則的短文件名稱
六.TextStream的方法和屬性
方法
Close():關閉文本流
Read(charnum):讀指定個數的字符
ReadAll():讀整個文本
ReadLine():讀一行
Skip(charnum):跳過指定個數的字符
SkipLine():跳過一行
Write(str):寫入字符串
WriteBlankLines(linenum):寫入指定個數的換行符
WriteLine(str):寫入一行
屬性
AtEndOfLine:判斷是否行尾
AtEndOfStream:判斷是否文本尾
Column:當前的列數
Line:當前的行數
七.使用用例
我們假象一下這樣一個應用,訪問某文件夾下所有文件和文件夾,獲取其屬性,並將之都改為只讀的,最后將該文件夾改名為test.下面是改應用的實現。
var
filesys =
new
ActiveXObject(
"Scripting.FileSystemObject"
);
var
myfolder = filesys.GetFolder(
"C:\\jingle"
);
var
myfile = filesys.CreateTextFile(
"c:\\jingle\\myfile.txt"
);
var
fc =
new
Enumerator(myfolder.subFolders);
var
obj;
for
(; !fc.atEnd(); fc.moveNext())
{
obj = filesys.GetFolder(fc.item());
myfile.WriteLine(obj.Path);
myfile.WriteLine(obj.Type);
if
(obj.Attributes & 2048){
myfile.writeLine(
"壓縮"
);
}
myfile.WriteBlankLines(2);
obj.Attributes = obj.Attributes | 1;
}
fc =
new
Enumerator(myfolder.files);
for
(; !fc.atEnd(); fc.moveNext())
{
obj = filesys.GetFile(fc.item());
myfile.WriteLine(obj.Path);
myfile.WriteLine(obj.Type);
if
(obj.Attributes & 2048){
myfile.writeLine(
"壓縮"
);
}
myfile.WriteBlankLines(2);
obj.Attributes = obj.Attributes | 1;
}
myfile.close();
myfolder.Name =
"test"
|
作者: Jingle Guo
出處: http://www.cnblogs.com/studynote/
若標題中有“轉載”字樣,則本文版權歸原作者所有。若無轉載字樣,本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利.