Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 移动或删除文件夹中最后一个文件的权限被拒绝_Ms Access_Foreach_Vba_File Management_Filesystemobject - Fatal编程技术网

Ms access 移动或删除文件夹中最后一个文件的权限被拒绝

Ms access 移动或删除文件夹中最后一个文件的权限被拒绝,ms-access,foreach,vba,file-management,filesystemobject,Ms Access,Foreach,Vba,File Management,Filesystemobject,我在一个模块中有一个MS Access VBA过程,该模块在特定文件夹中的文件上有一个for each循环 在循环内部,我在一个单独的文件夹中创建了一个新文件,然后用循环中文件中的清理数据填充该文件。我将新文件的数据导入SQLServer2005数据库。成功导入后,脚本将删除已清理的文件,并尝试将循环中的文件移动(或复制/删除)到同一目录中的存档子文件夹 文件循环在循环文件夹中的所有文件上都能正常工作。。。除了最后一个文件。此时会弹出“权限被拒绝”错误。 在上述情况下,错误消息总是发生在以下情况

我在一个模块中有一个MS Access VBA过程,该模块在特定文件夹中的文件上有一个for each循环

在循环内部,我在一个单独的文件夹中创建了一个新文件,然后用循环中文件中的清理数据填充该文件。我将新文件的数据导入SQLServer2005数据库。成功导入后,脚本将删除已清理的文件,并尝试将循环中的文件移动(或复制/删除)到同一目录中的存档子文件夹

文件循环在循环文件夹中的所有文件上都能正常工作。。。除了最后一个文件。此时会弹出“权限被拒绝”错误。

在上述情况下,错误消息总是发生在以下情况之一(我尝试了几个类似的命令):

这是我的密码:

Dim fso As New Scripting.FileSystemObject
Dim f As file
Dim processingFiles As Files

If fso.FolderExists(incomingPath) Then
    Set processingFiles = fso.GetFolder(incomingPath).Files
End If

For Each f In processingFiles

    /*this is where the create a new file and clean it part runs - works fine*/

    If fso.FileExists(archivePathFile) Then
        Kill archivePathFile
    End If

    If fso.FileExists(tempPath & "\cleaned_processing_file.txt") Then
        Kill tempPath & "\clean_processing_file.txt"
    End If


    f.Move archivePathFile   '<------------- Permission Denied, last file in folder
    Debug.Print f.Name & " is now in " & incomingPath & "\Archive"

    'f.Copy archivePathFile, True 
    'f.Delete True '<----------------------- Permission Denied, last file

    'Name origPathFile As archivePathFile '< Path/File access error, last file

Next '<--- For Each Loop
Dim fso作为新的Scripting.FileSystemObject
将f作为文件
将文件作为文件处理
如果存在fso.folder(incomingPath),则
设置processingFiles=fso.GetFolder(incomingPath).Files
如果结束
对于处理文件中的每个f
/*这是“创建新文件并清理它”部分运行的地方-工作正常*/
如果存在fso.files(archivePathFile),则
杀死archivePathFile
如果结束
如果存在fso.files(tempPath&“\cleaned\u processing\u file.txt”),则
Kill tempPath&“\clean\u processing\u file.txt”
如果结束
f、 Move archivePathFile'我将此作为“答案”发布,这样代码就会显示出来,但您(显然)不必接受它

我刚刚测试了最小的案例

Sub move_to_foo()
Dim fso As New FileSystemObject
Dim processingFiles As Files, f As File
Set processingFiles = fso.GetFolder("C:\__tmp").Files
For Each f In processingFiles
    Debug.Print "Moving """ & f.Name & """..."
    f.Move "C:\__tmp\foo\" & f.Name
Next
End Sub

…而且它不会在文件夹中的最后一个文件上失败,因此您的问题必须与您的代码有关。如果您选择编辑您的问题并提供更多详细信息,那么我很乐意提供帮助,但现在您的问题(如上所述)没有答案。

我遇到了与您完全相同的问题。 除最后一个文件外,所有文件都将直接从源目录移动到目标目录,这将导致显示“权限被拒绝”。如果有2个或30个文件,就会发生这种情况。 在移动文件之前,我正在将数据从文件复制到SQL数据库。 解决方案是在使用对象解析文件并插入SQL数据后,将其设置为“Nothing”

例如,插入SQL脚本数据后,可以移动文件。释放对象资源:

Set objFSO = Nothing
Set objTextFile = Nothing

您的
processingFiles
集合是否包含任何系统文件,如
desktop.ini
,这些文件可能会影响工作?它只包含.txt文件。唯一的子文件夹是其存档文件夹。对所有文件和文件夹(包括处理文件)禁用只读。我可以将数千个文件移动到存档子文件夹而不会出现问题;这只是给我带来麻烦的最后一个文件。我想您在每次移动/删除之前都尝试过
debug.print f.Name
,以确保它不是导致问题的隐藏文件。您应该在SQL导入之后插入行
DoEvents
,以便让SQL有机会运行,但这并不能解释为什么总是最后一个文件导致问题。我很欣赏
DoEvents
提示@grahamj42。我好不容易才学会了那个把戏。是的,我的
Debug.Print”文件名是:“&f.Name
——实际上就在
DoEvents
的下面。我可以确认它始终是文件集合中的最后一个文件。为了便于测试,我甚至在前两个文件上设置了一个要退出的计数器。。。第二个文件将失败(权限被拒绝)。然后我尝试了所有25000个文件。。。最后一个文件将失败(权限被拒绝)。您会说“为了测试目的,我甚至在前两个文件上放置了一个要退出的计数器……第二个文件将失败”,但如果您已经退出循环,那么在循环退出后您是否在使用f?谢谢您的hlpe。我没能按它应该做的去做。我只能猜测,可能是写入文件夹的实用程序导致了某种锁。我将文件复制到一个临时文件夹中,在该文件夹上循环,并将活动文件移动到循环内的存档中,从而使其正常工作。一旦跳出循环,我将删除临时文件夹中的文件,而不会出现权限被拒绝的问题。
Set objFSO = Nothing
Set objTextFile = Nothing