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

Вниз

Как передать консоли конец цайла (EOF)?   Найти похожие ветки 

 
Slym ©   (2004-02-12 19:04) [0]

По документации RAR имена архивируемых файлов может получать через StdIn...(rar a a.rar @) файл, перевод строки, файл перевод строки, конец файла... :

var
 sa:TSecurityAttributes;
 sd:TSecurityDescriptor;
 si:TStartupInfo;
 pi:TProcessInformation;
 INWPipe,INRPipe:THandle;
begin
 CmdLine:="rar a a.rar @";
 sa.nLength:=SizeOf(TSecurityAttributes);
 sa.lpSecurityDescriptor:=NIL;
 sa.bInheritHandle:=true;

 if CreatePipe(INRPipe,INWPipe,@sa,0) then
 try
   FillChar(si,SizeOf(si),#0);
   si.cb:=Sizeof(si);
   si.wShowWindow:=SW_HIDE;
   si.dwFlags:=STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
   si.hStdInput:=INRPipe;
   if CreateProcess(nil,PChar(CmdLine),nil,nil,TRUE,0,nil,nil,si,pi) then
   begin
     CloseHandle(INRPipe);
     WriteFile(INWPipe,a,Length(a),Writed,nil);
     CloseHandle(INWPipe);//Что закрытие пайпа, что посылка #26#13#10 (eof) один хрен! не пашет!
     if WaitForSingleObject(pi.hProcess,INFINITE)=WAIT_OBJECT_0 then
       GetExitCodeProcess(pi.hProcess,res)
     else res:=2;
     CloseHandle(pi.hProcess);
   end else Abort;
 except
     CloseHandle(INRPipe);
     CloseHandle(INWPipe);
 end;


Дык этот код не работает... Рар чего-то ждет...
Пробовал типа "Copy con c:\1.txt" тоже не пашет...


 
Slym ©   (2004-02-16 04:56) [1]

А данная прога вместо RAR работает... понимает и закрытие пайпа и #26#13#10 :
program Project2;

{$APPTYPE CONSOLE}
uses windows;

var a:array[0..1023] of char;
h:dword;
i:dword;
f:dword;
begin
 h:=GetStdHandle(STD_INPUT_HANDLE);
 ReadFile(h,a,1024,i,nil);
 f:=CreateFile("c:\test.txt",GENERIC_READ or GENERIC_WRITE,0,nil,CREATE_ALWAYS,0,0);
 WriteFile(f,a,i,i,nil);
 CloseHandle(f);
end.

Как рару сообщить что ввод закончен?


 
Polevi ©   (2004-02-16 10:46) [2]

ипользуя данный FAQ
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=1057316445&n=15
я создал архив вызовом
AddCommand("rar a z.rar unit1.pas unit1.dfm");


 
Slym ©   (2004-02-17 04:51) [3]

Я тоже создал...
AddCommand("rar a z.rar unit1.pas unit1.dfm");

Но (читай первый пост), "rar a z.rar @" - означает:
Rar получает имена не через Коммандную строку, а запрашивает их из STDIN (readln делает!), команда завершения ввода - конец файла (#26). прекращает запросы и приступает к архивированию.
Т.е. должно быть примерно так:
AddCommand("rar a z.rar @");
AddCommand("unit1.pas");
AddCommand("unit1.dfm");
AddCommand(#26);

Но не работает...


 
Slym ©   (2004-02-17 05:01) [4]

Забираю свой последний пост...
Оказалось после закрытия программы архив всеже создавался!!!
Судя по всему после закрытия пайпов... всеже срабатывает "Конец файла"


 
Slym ©   (2004-02-17 06:43) [5]

Так и есть закрываю пайп для записи в StdIn и Rar начинает паковать!
Тема закрыта!


 
Polevi ©   (2004-02-17 09:37) [6]

>Slym ©   (17.02.04 06:43) [5]
извини, но мне любопытно, в каких случаях нельзя сразу список файлов в командную строку передать ?



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

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

Наверх




Память: 0.48 MB
Время: 0.025 c
1-1080636305
Фикус
2004-03-30 12:45
2004.04.18
Вопрос по Excel


14-1080044979
Digitman
2004-03-23 15:29
2004.04.18
Занимательное-познавательное из куриного мира


1-1080707445
sapsi
2004-03-31 08:30
2004.04.18
Rx clock


14-1080285582
Виталий
2004-03-26 10:19
2004.04.18
Вопрос от новичка (RichEdit...)


7-1076499402
ashnurov
2004-02-11 14:36
2004.04.18
XP