![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
CreateProcess+AssignFile
TUser © (2004-07-11 08:33:00)Я запускаю внешнюю программу и получаю файл с ее рузультатами. Дальше я этот файл читаю. После CreateProcess написан WaitForSingleObject. Проблема в том, что файл появляется не сразу после окончания работаы внешней программы. Программа уже закончила работать, а файл становится видимым только через какое-то время. Если поставить while not FileExists(name) do sleep(5), то это тоже не спасает, FileExists видит такой файл, а при попытке сделать ему Reset получается I/O error 32. Спасает только просто sleep() с некоторым большим интервалом, но это плохо, т.к. необходимое значение такого интервала будет зависеть от конкретного компьютера и его загруженности другими приложениями. Как тут быть?
Mim1 (2004-07-11 15:26:00) [1]Появление файлов в проводнике не как ни связано с появлением их на диске.
Anatoly Podgoretsky (2004-07-11 12:21:00) [2]FindFirstChangeNotificationИ не путай появление файлов в проводнике, которое делается с задержкой, ты по попробуй нажать F5 и увидишь файлы, которые по твоему не появились
TUser (2004-07-11 11:59:00) [3]
> Полтергейст какой то :), врядли такое есть в реале, наверное
> дело в чем нибудь другом.
А посмотрите, когда файлы в Проводнике появляются - тоже ведь не сразу. А программа завершается - там WaitForSingleObject.
> Так ты тогда ошибку обрабатывай у Reset
Был у меня такой вариант.
b:=false;
repeat
try
reset(f);
b:=true;
except
end;
until b;
Но как-то выглядит подозрительно. Неужели нет чего-нибудь типа WaitForSingleObject, но так, чтобы ожидалось не окончание процесса, а появление эготового файла'?
Mim1 (2004-07-11 11:18:00) [4]
> Программа уже закончила работать, а файл становится видимым
> только через какое-то время
Полтергейст какой то :), врядли такое есть в реале, наверное дело в чем нибудь другом.
> Если поставить while not FileExists(name) do sleep(5), то
> это тоже не спасает, FileExists видит такой файл, а при
> попытке сделать ему Reset получается I/O error 32.
Может все таки программа не завершилась, или файл занят кем то еще?
Anatoly Podgoretsky (2004-07-11 10:39:00) [5]Так ты тогда ошибку обрабатывай у Reset