Umbenennen einer Datei mit dem FileSystemObject-Objekt beim Durchlaufen der Dateien
Als Vorwort, ich bin das schreiben von code in Access 2003, aber Benutzer, die mit Access 2013, und so brauche ich es, um kompatibel zu sein für beide. Ich habe eine Schleife, die die Anwendung verwendet.FileSearch-Schleife durch eine Reihe von Dateien in einem Verzeichnis. Es ist mein Verständnis, dass diese veraltet ist, in einer neueren version von Access, und so habe ich die "For Each" Schleife über Dateien.
Hier ist das Stück code, den ich ändern bin:
strPath = CurrentProject.Path & "\Files\"
strFileName = "SourceCode.txt"
With Application.FileSearch
.FileName = "*.txt"
.LookIn = strPath
.Execute
intFileCount = .foundfiles.Count
For x = 1 To intFileCount
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(.foundfiles(x))
strNewFileName = Right((.foundfiles(x)), Len((.foundfiles(x))) - (InStr((.foundfiles(x)), "Files\") + 5))
fs.MoveFile f, strPath & strFileName
'Run the Process() function
Process
FileCopy strPath & strFileName, strPath & "Processed\" & strNewFileName
Kill strPath & strFileName
Next x
End With
Und hier der code, den ich ersetzen Sie es mit:
strPath = CurrentProject.Path & "\Files\"
strFileName = "SourceCode.txt"
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(strPath)
Set fc = f.Files
For Each f1 In fc
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strPath & f1.Name, 1)
strNewFileName = f1.Name
f1.Name = strFileName
'Run the Process() function
Process
FileCopy strPath & strFileName, strPath & "Processed\" & strNewFileName
Kill strPath & strFileName
Next
Dieser code durchläuft jede Datei und startet dann einen Prozess () - Funktion, die änderungen an der Datei. Also So wie ich es habe zu arbeiten ist es, Veränderungen der aktiven Datei benannt werden "SourceCode.txt", dann wird die Process () - Funktion kennt, um die Arbeit mit der Datei dieses namens. Dann verschiebt es die Datei in den "Bearbeitet" - Unterordner, mit Ihren ursprünglichen Dateinamen.
Klappte das im original-code. Der neue code scheint meistens arbeiten, außer ich kann nicht einen Weg finden, benennen Sie die Datei "SourceCode.txt" vor der Gründung von Process(). Ich habe versucht, mehrere Möglichkeiten, aber ich bekomme immer Fehler. Im code oben, ich habe versucht, "f1.Name = strFileName". Das gibt mir ein "Permission Denied" - Fehler. Ich habe versucht, alternativ benutzen Sie FileCopy, und dann der Kill-Befehl auf der original-Datei, aber der Kill-Befehl einen Fehler zurückgab. Ich vermute, das "FileSystemObject" ist die Datei gesperrt, so dass es nicht verschoben werden kann oder getötet werden. Aber die alte version des Codes war in der Lage, um es zu bewegen mit kein problem.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bekommt man "Permission Denied", weil Sie versuchen, eine Datei umbenennen, wenn es im Einsatz ist, nämlich durch
objFSO.OpenTextFile
. Dies ist anders alsfs.GetFile
und nicht in deinem ursprünglichen code - brauchen Sie es? Es gibt eineTextStream
dass Sie später nicht verwenden.In jedem Fall, bewegen Sie den
f1.Name = strFileName
zu, bevor Sie die Datei öffnen oder nachdem Sie fertig sind Bearbeitung, rufen SieobjFile.Close
und dann umbenennen.