FileSystemObject (FSO)對象方法總結及應用


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/
若標題中有“轉載”字樣,則本文版權歸原作者所有。若無轉載字樣,本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利.
 

C++

 
摘要: MSMQ能夠通過MQGetMachineProperties 獲取本機或其他機器的的公共密鑰,site list,path name等信息。這里需要注意的就是如果PROPID_QM_ENCRYPTION_PK和PROPID_QM_ENCRYPTION_PK_BASE同時存在,將有一個屬性不能成功獲取。而MS推薦使用的是PROPID_QM_ENCRYPTION_PK_BASE參數,所以就當PROPID_QM_ENCRYPTION_PK不存在吧。不多說,上代碼。void GetMachineProp(){ const int NUMBEROFPROPERTIES = 8; QMPROPID aPr 閱讀全文
posted @  2013-03-26 15:19 Jingle Guo 閱讀(4) |  評論 (0)  編輯
 
摘要: 1.前言應用程序創建的Queue根據你是否希望被其他程序找到可分為Public Queue和Private Queue,Public Queue會在directory service中注冊,有利於長時間的使用。Private Queue在本機注冊,而不在directory service中注冊,它一般通過在%windir%\System32\MSMQ\Storage\Lqs下存儲相應的描敘文件來注冊。注冊在本機中的Public Queue也會在Lqs目錄下存儲相應的描述文件。建立Private Queue更快,能在directory service不工作的時候正常工作。另外按照可以接收的Mes 閱讀全文
posted @  2013-03-26 14:49 Jingle Guo 閱讀(14) |  評論 (0)  編輯
 
摘要: 一.PKI的作用公鑰加密也叫做非對稱加密,它用一對密鑰來進行加密和解密,用某用戶密鑰加密后所得的信息,只能用該用戶的解密密鑰才能解密。如果知道了其中一個,並不能計算出另外一個。因此如果公開了一對密鑰中的一個,並不會危害到另外一個的秘密性質。稱公開的密鑰為公鑰;不公開的密鑰為私鑰。在用戶使用公鑰加密時並不能確定使用的公鑰的可信性,Public Key Infrastructure就是通過引入一個可信的第三方certification authority(CA)來確保公鑰的完整性和持有人的身份。二.X.509PKI的結構X.509 public key infrastructure標准的結構如下- 閱讀全文
posted @  2013-03-22 15:51 Jingle Guo 閱讀(59) |  評論 (0)  編輯
 
摘要: 1.MSMQ是什么?Message Queue(微軟消息隊列)是在多個不同的應用之間實現相互通信的一種異步傳輸模式,相互通信的應用可以分布於同一台機器上,也可以分布於相連的網絡空間中的任一位置。它的實現原理是:消息的發送者把自己想要發送的信息放入一個容器中(我們稱之為Message),然后把它保存至一個系統公用空間的消息隊列(Message Queue)中;本地或者是異地的消息接收程序再從該隊列中取出發給它的消息進行處理。(來源:百度百科)2.MSMQ的好處比起TCP/IP通訊,我覺得MSMQ的好處在能支持兩個應用程序之間的離線通訊,接收方和發送方不需要同時運行,發送方可以先把消息發出來,過一 閱讀全文
posted @  2013-03-18 20:46 Jingle Guo 閱讀(97) |  評論 (1)  編輯
分類:  ActiveX
標簽:  FSOFileSystemObjectActiveXJavascript


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM