[英]In VBScript, how do I manage “Scripting.FileSystemObjects” like objFSO and objFolder for multiple folders/files?
在VBScript中,如何為多個文件夾/文件管理objFSO和objFolder之類的“ Scripting.FileSystemObjects”?
在“主”代碼節中,我聲明“ Scripting.FileSystemObject”的實例(全局)
Set objFSO = CreateObject("Scripting.FileSystemObject")
然后,我執行一些操作,例如:
If objFSO.FileExists(strOutputFilename) Then
WScript.Echo "Deleting File: " & strOutputFilename
objFSO.DeleteFile strOutputFilename
End If
然后,在一個循環中,我得到一個文件夾,並將其傳遞給函數:
For gintLoop = 0 to (ubound(arraySearchPath))
wscript.echo "Processing folder:" & arraySearchPath(gintLoop)
Set objFolderX = objFSO.GetFolder(arraySearchPath(gintLoop))
Call DoWork (objFolderX, arrayParam1, arrayParam2)
Next
到目前為止一切都清楚了...
現在,在函數中,我執行以下操作:
a)從objFolder收集文件名
Set lobjFolder = objFSO.GetFolder(objFolderX.Path)
Set lcolFiles = lobjFolder.Files
b)檢查其他(不相關)路徑中是否存在文件
c)獲取各種文件的大小:
lcurInputFileSize = CCur(lobjFile.Size)
d)刪除各種文件
e)打開文件進行讀取
For Each lobjFile in lcolFiles
lstrTargetFile = lobjFolder.Path & "\" & lobjFile.Name
Set lobjInputFile = objFSO.OpenTextFile(lstrTargetFile, ForReading)
...
f)打開文件進行寫入
Set lobjOutputFile = objFSO.OpenTextFile(strOutputFilename, ForAppending, True)
g)調用傳遞各種對象的其他子功能
h)遞歸調用(相同)函數來處理其他文件夾
For Each lobjSubfolderY in objFolderX.SubFolders
Call DoWork (lobjSubfolderY, arrayParam1, arrayParam2)
Next
我擔心的是,我需要確保FileSystemObjects的各種用法(例如文件夾路徑,打開的文件等)不會在以后使用FileSystemObjects時被“踩踏”。
問題1:我是否需要(或建議使用)“主要”和每個(或某些)子/功能的單獨“ Scripting.FileSystemObject”(objFSO)實例?
問題2:類似地,我如何管理其他各種對象以避免丟失數據?
凱文
問題1 :否,您不需要Scripting.FileSystemObject的多個實例。
對象上的方法都是靜態的。
實際上,“腳本運行時參考”的文檔指出FSO是單例的 ,盡管它不使用以下單詞:
無論嘗試創建另一個實例,您只能創建FileSystemObject對象的一個實例。
來自: http : //msdn.microsoft.com/zh-cn/library/2z9ffy99(v=vs.84).aspx
以我的經驗,多次調用WScript.CreateObject("Scripting.FileSystemObject")
不會導致錯誤。 后續調用的返回值可能只是原始創建的FSO的副本。
至於您的問題2,我不明白。 我認為您指的是FSO返回的對象,Folder,File,TextStream等類型的對象。
像對待其他有狀態對象一樣對待它們。 您可以有多個實例,如果要進行遞歸,則需要將它們作為基於堆棧的參數傳遞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.