簡體   English   中英

在VBScript中,如何為多個文件夾/文件管理objFSO和objFolder之類的“ Scripting.FileSystemObjects”?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM