Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];

Вниз

Получение вывода команды 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.014 c
15-1150916353
Лэнгдон
2006-06-21 22:59
2006.07.23
Число Phi


4-1144642984
Vad
2006-04-10 08:23
2006.07.23
Меню чужого приложения


15-1150888236
DesWind
2006-06-21 15:10
2006.07.23
Заголовок парадоксовой таблицы


15-1151035080
tehnyk
2006-06-23 07:58
2006.07.23
Куплю лицензионные Windows, Office, Server


15-1150355783
Vaitek__
2006-06-15 11:16
2006.07.23
Софт на древний ноутбук





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский