Форум: "Система";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];
ВнизКак передать консоли конец цайла (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.032 c