Я работаю над системой, которая изменяет файл «на месте». Использование кавычек связано с тем, что фактический процесс выглядит следующим образом:FileSystemObject вызывает выполнение ... слишком быстро?
- Внести изменения в новый файл с временным именем.
- Переместить исходный файл (переименовать) с расширением «.bak»
- Переместить (переименовать) новый файл в имя исходного файла.
- Удалить промежуточный файл.
Этот процесс включает использование PDFtk для изменения файлов PDF. Проблема в том, что когда я запускаю код, он иногда «пропускает» шаг в какой-то момент на пути, иногда приводя к ошибке, связанной с одним из предыдущих шагов, которые не происходят.
Когда я просматриваю код с помощью отладчика, все работает отлично каждый раз. Если я добавлю следующий код между каждым вызовом файловой системы, он также работает.
Public Sub Wait(seconds As Integer)
Dim dTimer As Double
dTimer = Timer
Do While Timer < dTimer + seconds
DoEvents
Loop
End Sub
(Кредит: this VBForums post)
Я действительно не хочу, чтобы это сделать, потому что он добавляет к времени выполнения, и я действительно не могу сказать, как долго паузы «достаточно «для различных клиентов, которые будут использовать это приложение. Есть ли лучший способ обеспечить правильную работу вышеуказанных функций? Возможно, вообще не используя FileSystemObject
?
Вот код, который я работаю с:
If LCase$(inputFilename) = LCase$(outputFilename) Then
' Saving changes to original file.
Set fso = New FileSystemObject
tempPath = fso.GetParentFolderName(outputFilename) & "\" & _
Format$(Now, "mm_dd_yyyy_hh_nn_ss") & ".pdf"
' Create temp file
CreateSubsetFromPDF = Shell("""" & App.Path & "\pdftk"" """ & inputFilename & _
""" cat " & pages & " output """ & tempPath & """", vbHide)
' Copy temp file to actual destination, overwriting.
fso.CopyFile tempPath, outputFilename, True
fso.DeleteFile tempPath
End If
Хорошо, что вы говорите, имеет смысл. Я внесу эти изменения в код, с которым я работаю, и сообщаю об этом. – helrich
Похоже, что это работает, у меня есть несколько разных ситуаций, чтобы продолжать тестирование, но это выглядит как билет. Благодаря! – helrich