In VBScript, wie verwalte ich “Scripting.FileSystemObjects" wie objFSO und objFolder für mehrere Ordner/Dateien?
In VBScript, wie verwalte ich "Scripting.FileSystemObjects" wie objFSO und objFolder für mehrere Ordner/Dateien ?
In der "Main" code-Abschnitt deklarieren Sie eine Instanz (global) "Scripting.FileSystemObject"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dann habe ich einige Operationen, wie:
If objFSO.FileExists(strOutputFilename) Then
WScript.Echo "Deleting File: " & strOutputFilename
objFSO.DeleteFile strOutputFilename
End If
Dann in einer Schleife, bekomme ich einen Ordner, und geben Sie Sie an eine Funktion:
For gintLoop = 0 to (ubound(arraySearchPath))
wscript.echo "Processing folder:" & arraySearchPath(gintLoop)
Set objFolderX = objFSO.GetFolder(arraySearchPath(gintLoop))
Call DoWork (objFolderX, arrayParam1, arrayParam2)
Next
So weit ist alles klar...
Nun, innerhalb der Funktion, die ich tun, Dinge wie:
a) sammeln von Dateinamen aus objFolder
Set lobjFolder = objFSO.GetFolder(objFolderX.Path)
Set lcolFiles = lobjFolder.Files
b) überprüfen Sie für existance von Dateien, die in anderen (nicht verwandten) Pfade
c) die Größe der verschiedenen Dateien:
lcurInputFileSize = CCur(lobjFile.Size)
d) löschen Sie verschiedene Dateien
e) öffnen von Dateien zum Lesen
For Each lobjFile in lcolFiles
lstrTargetFile = lobjFolder.Path & "\" & lobjFile.Name
Set lobjInputFile = objFSO.OpenTextFile(lstrTargetFile, ForReading)
...
f) öffnen von Dateien zum schreiben
Set lobjOutputFile = objFSO.OpenTextFile(strOutputFilename, ForAppending, True)
g) andere subs/functions vorbei an den verschiedenen Objekt
h) rekursiv aufrufen die (gleiche) Funktion zum verarbeiten anderer Ordner
For Each lobjSubfolderY in objFolderX.SubFolders
Call DoWork (lobjSubfolderY, arrayParam1, arrayParam2)
Next
Meine Sorge ist, dass ich brauchen, um sicherzustellen, dass die verschiedenen Verwendungen des FileSystemObjects wie Ordner, Pfade, Dateien öffnen, etc, sind nicht "Getreten", die von späteren Nutzung des FileSystemObjects.
Frage 1:
Muss ich (bzw. ist es ratsam), um eine einzelne Instanz von "Scripting.FileSystemObject" (objFSO) für "Main" und alle (oder einige) sub/function ?
Frage 2:
Ähnlich, wie verwalte ich die verschiedenen anderen Objekten zu vermeiden, Daten zu verlieren ?
Kevin
InformationsquelleAutor Kevin Fegan | 2012-06-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Q1: Nein, müssen Sie nicht mehrere Instanzen von Scripting."FileSystemObject".
Die Methoden für das Objekt sind alle statisch.
In der Tat, die Dokumentation für den Scripting Runtime-Verweis zeigt an, dass das BFS ist eine singleton, obwohl es nicht das Wort:
aus: http://msdn.microsoft.com/en-us/library/2z9ffy99(v=vs. 84).aspx
Meiner Erfahrung, Berufung
WScript.CreateObject("Scripting.FileSystemObject")
mehrere Male nicht zu einem Fehler führen. Wahrscheinlich ist der Rückgabewert bei nachfolgenden aufrufen wird nur eine Kopie des ursprünglich BFS.Als für Ihre Frage 2, ich bekomme es nicht. Ich denke, Sie beziehen sich auf Objekte, die zurückgegeben werden von FSO, Objekte vom Typ Ordner, Datei, TextStream und so weiter.
Behandeln diese wie jede andere statusbehaftete Objekt. Sie können mehrere Instanzen haben, und Sie müssen übergeben Sie als stack-basierte Argumente, wenn Sie wollen Rekursion.
ja, das ist es, was ich meine. Objekte werden übergeben ref, aber das ist nicht das, was Sie brauchen, zu kümmern. Konzentrieren Sie sich nur auf die Aufrechterhaltung eines bestimmten Objekts Instanz für jede Datei oder jeden Ordner, den Sie sind das hantieren mit.
Mit Ihrer Hilfe war ich in der Lage, die Dinge zu Sortieren, nochmals vielen Dank. Ich fand auch eine objFile in der Rekursiven Funktion, die wurde immer als "Gesetzt" für die gleiche Datei (logfile). So, das habe ich geändert werden Dim(med) in der "Main" - Programm, so ist es jetzt ein globales Objekt.
InformationsquelleAutor Cheeso