Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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.031 c
7-1077320098
Electon
2004-02-21 02:34
2004.04.18
Использование чужой DLL


1-1080915486
MiCOLA
2004-04-02 18:18
2004.04.18
type


3-1079447433
Andriy Tysh
2004-03-16 17:30
2004.04.18
Group in DBGrid (DBGridEh)


14-1079020337
WebErr
2004-03-11 18:52
2004.04.18
2D - forever


1-1080699443
Zakalibit
2004-03-31 06:17
2004.04.18
Синхронизация VCL с другими потоками





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский