У меня есть процедура MS Access VBA внутри модуля, который имеет цикл для каждого файла в определенной папке.
Внутри цикла я создаю новый файл в отдельной папке, которая затем заполняется очищенными данными из файла в цикле. Я импортирую данные нового файла в базу данных SQL Server 2005. После успешного импорта скрипт удаляет очищенный файл и пытается переместить (или скопировать/удалить) файл в цикле в подпапку архива в том же каталоге.
Зацикливание файлов работает со всеми файлами в зацикленной папке... кроме последнего файла. Именно тогда появляется сообщение об отказе в доступе.
Сообщение об ошибке в вышеупомянутых обстоятельствах всегда появляется в одном из следующих (я пробовал несколько похожих команд):
fso.MoveFile
fso.DeleteFile (just after copy)
f.Move
f.Delete (just after copy)
Name origin As destination
Вот мой код:
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
processingFiles
какие-либо системные файлы, такие какdesktop.ini
, которые могут помешать работе? - person Gord Thompson   schedule 15.03.2013debug.print f.Name
перед каждым перемещением/удалением, чтобы убедиться, что проблема не в скрытом файле. Вы должны вставить строкуDoEvents
после импорта SQL, чтобы позволить SQL работать, но это не объясняет, почему всегда последний файл вызывает проблему. - person grahamj42   schedule 16.03.2013DoEvents
, @grahamj42. Я узнал об этом трюке на собственном горьком опыте. Да, у меня былоDebug.Print "File Name is: " & f.Name
- фактически чуть нижеDoEvents
. Я могу подтвердить, что это всегда последний файл в коллекции файлов. Я даже установил счетчик Exit For для первых двух файлов в целях тестирования ... второй файл не будет работать (отказано в доступе). Затем я попробовал все 25 000 файлов ... последний файл не работал (отказано в доступе). - person coge.soft   schedule 16.03.2013Next
. - person coge.soft   schedule 16.03.2013