Rename a file with FileSystemObject while looping through files
作为序言,我正在使用Access 2003编写代码,但将使用户使用Access 2013,因此我需要使两者兼容。我有一个循环,该循环使用Application.FileSearch遍历目录中的许多文件。据我了解,Access的较新版本已弃用此功能,因此我必须使用" For Each"来遍历文件。
这是我要更改的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 |
这是我将其替换为的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 |
该代码循环遍历每个文件,然后启动Process()函数对文件进行更改。因此,我的工作方式是将活动文件更改为" SourceCode.txt",然后Process()函数知道可以使用该名称的文件。然后,它会将文件及其原始文件名移到"已处理"子文件夹中。
这在原始代码中工作正常。新代码似乎可以正常工作,除了在启动Process()之前找不到将文件重命名为" SourceCode.txt"的方法外。我尝试了几种方法,但始终出错。在上面的代码中,我尝试了" f1.Name = strFileName"。这给我一个"权限被拒绝"错误。我尝试使用FileCopy,然后使用原始文件上的Kill命令,但是Kill命令返回了错误。我怀疑FileSystemObject锁定了文件,因此无法移动或杀死该文件。但是旧版本的代码可以毫无问题地移动它。
之所以会显示"权限被拒绝",是因为您试图在使用文件时通过
无论如何,在打开文件之前将