Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.129.67.26] |
|
Сообщ.
#1
,
|
|
|
Программа запускает батник, результатом которого является создание файла. Время работы батника разное. Нужно как-то зациклить программу, пока этот файл не создастся и сам файл будет доступен для записи, т.к. создается он изначально пустой а потом наполняется.
Дальше программа файл ренеймом переносит созданный файл в другую папку. Пробовал так сделать, не получается, не циклится, сразу проходит ShellExecute(0, 'open', 'cmd.exe', PChar(S), nil, SW_HIDE); // запуск стороннего батника repeat Try Succes:=True; RenameFile(OutputFolder+ChangeFileExt(ListBox1.Items[ListBox1.ItemIndex],''),OutputFolder+GetUserFromWindows+OutputFileName); Except Succes:=False; End; until succes; Добавлено repeat Try Succes:=True; FS:=TFileStream.Create(OutputFolder+ChangeFileExt(ListBox1.Items[ListBox1.ItemIndex],''),fmOpenWrite); Except Succes:=False; End; until succes; FS.Free; Вот так вродебы пашет, я FS.Free в нужном месте поставил, да и конструкцию не переврал? |
Сообщ.
#2
,
|
|
|
Извращенец. Дождись отработки батника.
procedure ExecuteFileAndWait(FileName:String;WindowState:Word); var Buffer: array[0..511] of Char; StartupInfo:TStartupInfo; ProcessInfo:TProcessInformation; ExitCode:DWORD; begin StrPCopy(Buffer,FileName); FillChar(StartupInfo,SizeOf(StartupInfo),#0); StartupInfo.cb := Sizeof(StartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow:=WindowState; if CreateProcess(nil, Buffer, nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then begin while WaitforSingleObject(ProcessInfo.hProcess,500)=WAIT_TIMEOUT do application.ProcessMessages; GetExitCodeProcess(ProcessInfo.hProcess, ExitCode); end end; ExecuteFileAndWait(S, SW_HIDE); |
Сообщ.
#3
,
|
|
|
Мудрено, но спасибо
|