Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.23;
Скачать: CL | DM;

Вниз

Получение вывода команды xcopy   Найти похожие ветки 

 
Priest ©   (2006-06-09 11:11) [0]

Запускаю данную команду, как получить то что она обычно выводит в консоль?


 
Ega23 ©   (2006-06-09 11:29) [1]

xcopy ...   >>1.txt
Потом откроешь этот 1.txt


 
Priest ©   (2006-06-09 11:30) [2]

так мне нужно в реал тайм. Я запускаю свою прогу и в ней xcopy. И мне нужо знать что делает прога....xcopy показывает ход выполнения и указывает какой файл скопирован только что....Как такое сделать?


 
easy ©   (2006-06-09 11:30) [3]

http://dfc.com.ru/?sid=2&id=7&itemid=2


 
Priest ©   (2006-06-09 11:51) [4]

>>easy
Спасибо :)


 
Ega23 ©   (2006-06-09 12:33) [5]


> http://dfc.com.ru/?sid=2&id=7&itemid=2


Прикольно, спасибо за ссылочку...


 
Priest ©   (2006-06-09 14:02) [6]

Только для xcopy не  работает. Для "route print" всё отлично работает, потому что эта команда выводит результат в конце выполнения. а xcopy постоянно выводит и поэтому не видно вплоть до завершения :(


 
Zz_   (2006-06-09 14:40) [7]

За такие ФАКИ надо отрывать ...


     while(True)do begin
       Sleep(10);
       PeekNamedPipe(rdout, @buf[1], 1023, @bread, @avail, nil);
       if(bread > 0)then begin
         ZeroMemory(@buf[1],sizeof(buf));
         if(avail > 1023)then begin
           while(bread >= 1023)do begin
             ReadFile(rdout, buf[1], 1023, bread, nil);
             mLog.Text := mLog.Text + PChar(@buf[1]);
             ZeroMemory(@buf[1],sizeof(buf));
           end;
         end else begin
           ReadFile(rdout, buf[1], 1023, bread, nil);
           mLog.Text := mLog.Text + PChar(@buf[1]);
         end;
       end;
       GetExitCodeProcess(pi.hProcess, exit_);
       if(exit_ <> STILL_ACTIVE)then break;
     end;


 
Priest ©   (2006-06-09 14:57) [8]

>>Zz_

А отдельной функции нет? Я не пойму куда это прописывать?


 
Zz_   (2006-06-09 15:08) [9]

Честно говоря, лично я подобным практически не занимаюсь.
Могу привести лишь код. Почему сделано именно так, я объяснить не могу.


var si       : STARTUPINFO;
   pi       : PROCESS_INFORMATION;
   sa       : SECURITY_ATTRIBUTES;
   sd       : SECURITY_DESCRIPTOR;
   cout     : THandle;
   rdout    : THandle;
   exit_    : DWORD;
   bread    : DWORD;
   avail    : DWORD;
   buf      : array[1..1024] of Char;
   sFileCfg : String;
   S        : String;
   tf       : TextFile;
   n        : Integer;
   k        : Integer;
begin
 Screen.Cursor := crHourGlass;
 try
   if( gf_IsWinNT )then begin
     InitializeSecurityDescriptor(@sd,SECURITY_DESCRIPTOR_REVISION);
     SetSecurityDescriptorDacl(@sd, True, nil, False);
     sa.lpSecurityDescriptor := @sd;
   end else begin
     sa.lpSecurityDescriptor := nil;
   end;
   sa.nLength        := sizeof(SECURITY_ATTRIBUTES);
   sa.bInheritHandle := LongBool(True);

   for n := 0 to(lbZRE.Count-1)do begin
     sFileCfg := . . .;
     AssignFile(tf, sFileCfg);
     try
       ReWrite(tf);
       WriteLn(tf, "[Connection]");
       . . .
     finally
       {$I-}CloseFile(tf);{$I+}IOResult;
     end;
     mLog.Lines.Add( "Обработка протокола < " + lbZRE.Items[n] +" >");

     if(not CreatePipe(rdout,cout,@sa,0))then raise Exception.Create("Error CreatePipe");

     ZeroMemory(@si,sizeof(si));
     si.cb := SizeOf(si);
     GetStartupInfo(si);
     si.dwFlags     := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
     si.wShowWindow := SW_HIDE;
     si.hStdOutput  := cout;

     if not CreateProcess(
        nil
      , PChar("....exe" + " " + sFileCfg)
      , nil
      , nil
      , True
      , CREATE_NEW_CONSOLE
      , nil
      , nil
      , si
      , pi
     )then begin
       CloseHandle(cout);
       CloseHandle(rdout);
       raise Exception.Create("Error CreateProcess");
     end;
     exit_ := 0;

     while(True)do begin
       Sleep(10);
       PeekNamedPipe(rdout, @buf[1], 1023, @bread, @avail, nil);
       if(bread > 0)then begin
         ZeroMemory(@buf[1],sizeof(buf));
         if(avail > 1023)then begin
           while(bread >= 1023)do begin
             ReadFile(rdout, buf[1], 1023, bread, nil);
             mLog.Text := mLog.Text + PChar(@buf[1]);
             ZeroMemory(@buf[1],sizeof(buf));
           end;
         end else begin
           ReadFile(rdout, buf[1], 1023, bread, nil);
           mLog.Text := mLog.Text + PChar(@buf[1]);
         end;
       end;
       GetExitCodeProcess(pi.hProcess, exit_);
       if(exit_ <> STILL_ACTIVE)then break;
     end;
     CloseHandle(pi.hThread);
     CloseHandle(pi.hProcess);
     CloseHandle(cout);
     CloseHandle(rdout);

     if(exit_ = 0)then begin
       mLog.Lines.Add("Протокол обработан успешно");
     end else begin
       mLog.Lines.Add("Ошибка обработки № ( " + IntToStr(Integer(exit_)) + " )");
     end;
   end;
 finally
   Screen.Cursor := crDefault;
 end



Страницы: 1 вся ветка

Текущий архив: 2006.07.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.029 c
2-1152085498
Новинький
2006-07-05 11:44
2006.07.23
Ребята сравните несколько запросов...


15-1150711268
Fireboy
2006-06-19 14:01
2006.07.23
Много вопросов на которые нужны ответы


6-1142275793
Новочеркасский Волк
2006-03-13 21:49
2006.07.23
Как заставить два TClientSocket отправлять одновременно текст!!!


15-1151040139
Ega23
2006-06-23 09:22
2006.07.23
С Днём рождения! 23 июня


2-1151767340
Sergp.
2006-07-01 19:22
2006.07.23
Как сделать в классе поле (по аналогии с абстрактными методами)?