Парни, посоветуйте решение по одной дилемме. Значит, из кода приложения вызывается сторонний ехе-шник с передачей ему параметров:
- Код: Выделить всё
Sub CreateFile()
Call Shell ("cmd.exe /c ""C:\My path\prg.exe"" > newfile.txt")
End Sub
Шелл вызывается, там своя задача начинает выполнятся, а управление тотчас же передаётся назад в приложение. Код идёт дальше, где собственно, срабатывает таймер на определение, появился ли нужный мне файл в директории:
- Код: Выделить всё
Private Sub myTimer_Timer()
Dim sTemp As String
sTemp = MyPath & "\" & "newfile.txt"
If FileExists(sTemp) Then
myTimer.Enabled = False
ExtractDataFromMyFile
End If
End Sub
и вот, что происходит: часть файла екзешник из шела успел записать. т.е. иными словами файл в директории появился, но он не полный ещё, а у меня в коде уже идёт его открытие, где удаётся получить размер файла конкретно на момент запроса. В итоге, я считываю в буфер только часть файла, что понятное дело не верно! Ведь, в шеле ещё выполняется запись в файл!
Как обойти это узкое место? Как понять, что файл уже полностью сохранился?
На вскидку приходит разве что, контролировать уничтожение терминального окна... Или, пробовать открывать файл монопольно и смотреть занят он или нет (хотя, пока не представляю как это технически сделать).
В идеале, конечно, лучше чтобы приложение приостановилось на то время пока выполняется операция в терминале, тогда и надобность в таймере отпадает, с определением сформировался ли файл.
Вот такая беда, господа.