Q&A

  • 외부프로그램실행하고 그 프로그램에서 생긴화일을 처리할때
제목이 좀 이상해서 다시 설명을 드립니다.
외부프로그램을 실행시키고 실행후 화일이 하나 생성됩니다. 그리고 그 화일을 가지고 화일작업(카피, 리네임, 이동)을 하는데...화일이 생성이 끝나기전에 다름 라인을 실행하는것 같은데 좋은 방법이 없나요?
첨하는거라 어려움이 많네요....
덧붙여 dos prompt 상에서 실행하는거라서 문자열변수에 폼에서 입력한 값을 가지고 실행명령을 만들고 그 문자열로 외부프로그램을 실행시키는곳입니다.
//Source 일부분
strParamTemp := edtStartNum.Text + '.TXT ' + edtStartNum.Text + '.DAT';
strPGTemp := curDirName + '' + 'M2skt ' + strParamTemp;
WinExec(PChar(strPGTemp), SW_HIDE);
sleep(500);
//화일복사
useFileCopy(edtStartNum.Text + '.DAT', curDirName + '', createDirPath + 'tempDir');
sleep(300);
......밑에 계속 비슷한 로직이라 생략.......
이렇듯이 sleep으로 시간을 주어서 하는데 아무래도 깔끔하지도 않고 정확하게 시간을 설정한것 같지도 않고요....
좋은 방법좀 알려주세요..그럼 꾸벅
2  COMMENTS
  • Profile
    KDDG_Jo 2002.08.09 19:29




    function WinExecAndWait32(FileName : PChar; CommandLine : PChar;
                           Visibility : Integer) : integer;
    var
      zAppName:array[0..512] of char;
      zCurDir:array[0..255] of char;
      WorkDir:ShortString;
      StartupInfo:TStartupInfo;
      ProcessInfo:TProcessInformation;
      TmpResult:dword;
    begin
      StrCopy(zAppName, FileName);
      StrCat(zAppName, CommandLine);
      GetDir(0, WorkDir);
      StrPCopy(zCurDir, WorkDir);
      FillChar(StartupInfo, Sizeof(StartupInfo),#0);
      StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := Visibility;
      if not CreateProcess(nil,
         zAppName,      { pointer to command line string }
         nil,           { pointer to process security attributes}
         nil,           { pointer to thread security attributes }
         false,                 { handle inheritance flag }
         CREATE_NEW_CONSOLE or  { creation flags }
         NORMAL_PRIORITY_CLASS,
         nil,                   { pointer to new environment block }
         zCurDir,               { pointer to current directory name }
         StartupInfo,           { pointer to STARTUPINFO }
         ProcessInfo) then      { pointer to PROCESS_INF }
       Result := -1
      else begin
       WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
       GetExitCodeProcess(ProcessInfo.hProcess,TmpResult);
       Result := TmpResult;
      end;
    end;


    begin
          strPGTemp := curDirName + '' + 'M2skt ' + strParamTemp;
          while WinExecAndWait32(PChar(strPGTemp),'', SW_HIDE) <> 0 do
          begin
             Application.ProcessMessages;
          end;
          useFileCopy(edtStartNum.Text + '.DAT', curDirName + '',            
                              createDirPath + 'tempDir');
    end;



  • Profile
    정상진 2002.08.09 21:14
    복받으세요