Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Работа с Winrar`ом


Автор: Akella 30.8.2007, 11:33
Программно архивирую файлы.

Подскажи такую весчичку по winrar`у:

есть главная папка вида :
D:\Programs\Kvartal\PhotoManager\Новая папка\квартиры\52768
в этой главной папке есть ещё 2 подпапки, в каждой из двух подпапок есть по несколько файлов,
нужно создать архив, чтобы внутри было только эти 2 папки и каждая со своими файлами, какую команду дать винрару?
я пишу:
Winrar a -ep имяАрхива "Путь к главной папке\*.*"

или так
Winrar a -ep имяАрхива "Путь к главной папке\"

а вот если кинуть в главную папку файлы, то всё в порядке, НО упаковывает только эти файлы, те две подпапки не трогает

ключ -R не помогает, т.к. всё архивируется, НО без папок.
короче в архиве хотелось бы видеть:
папка1\файл1
папка1\файл2
папка1\файл3
папка2\файл1
папка2\файл2
файл1
файл2

такой вариант не устраивает:
D:\Programs\Kvartal\PhotoManager\Новая папка\квартиры\52768\папка1\файл1 
 smile  smile  smile 

Код

//функция запуска и ожидания архивирования
         fmMain.ExecAndWait(fmMain.sWinrar,
                            'a -r -ep '+ sArcName + ' "' + IncludeTrailingPathDelimiter(dir+SearchRec.Name)+'*.*"',

                             edOut.Text,
                             0);


Код

function TfmMain.ExecAndWait(const FileName, Params: ShortString; ArcDir:string;
                               const WinState: Word): boolean; export;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: ShortString;
begin
  { Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x }
  CmdLine := '"' + Filename + '" ' + Params;

  //ShowMessage(CmdLine);

  FillChar(StartInfo, SizeOf(StartInfo), #0);
  with StartInfo do begin
    cb := SizeOf(StartInfo);
    dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
    wShowWindow := WinState;
  end;//with
  try
    Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
                            CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                            PChar(ArcDir),StartInfo,ProcInfo);
  except
    result := false;
  end;
  { Ожидаем завершения приложения }
  if Result then  begin
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
    { Free the Handles }
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
  end;//if Result then  begin
end;

Автор: Snowy 30.8.2007, 11:36
Добавь глючик -r

Автор: Akella 30.8.2007, 11:37
если открыть проводник, щелкнуть по папке 52768 правой кнопкой и выбрать меню винрара "добавить в архив", то внутренняя структура архива получается такая как надо

Добавлено через 58 секунд
Snowy, я ж писал, что ключик R не помогает, т.к. получается так:

файл1
файл2
файл3
файл1
файл2
файл1
файл2

а должно быть так:
папка1\файл1
папка1\файл2
папка1\файл3
папка2\файл1
папка2\файл2
файл1
файл2

Автор: Snowy 30.8.2007, 11:40
Так ты убери -ep
И перейди в папку упаковки и пакуй просто *.*, а не папка\*.*

Добавлено через 1 минуту и 13 секунд
Хотя нет, просто замени -ep на -ep1

Автор: Akella 30.8.2007, 11:47
Snowy, СУПЕР

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)