Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Поиск и архивирование директории


Автор: MaGICaN 20.7.2007, 15:01
Здравствуйте.
Подскажите пожалуйста как мне реализовать следующую задачу:
Необходимо найти файл(.txt), определить дирректорию в которой он находится и
заархивировать ее(директорию) в архив.
Заранее спасибо.


Автор: _hunter 20.7.2007, 15:09
1 (поиск) ищеш по форуму "FindFirst"
2 (архивация) ищеш на форуме или "архивация" или "VclZip"

Автор: MaGICaN 20.7.2007, 16:33
1 как через файнд некст искать в отдельном каталоге это понятно но как заставить прогу искать по всему харду? smile  
2 про архивацию можно поподробнее? и еше эту функцию VclZip я нашел версии 2.10 но установить несмог, если кто сможнт помочь буду только рад. smile 

Автор: _hunter 20.7.2007, 17:24
Цитата(MaGICaN @  20.7.2007,  16:33 Найти цитируемый пост)
1 как через файнд некст искать в отдельном каталоге это понятно но как заставить прогу искать по всему харду? smile  

рекурсивно перебираем все папки, начиная от корня. если проще говоря: находим все папки корня, находим все папки в первой папке, находим все папки...
за подробностями -- в поиск (обсуждалось примерно столько же раз сколько и простой поиск)

Цитата(MaGICaN @  20.7.2007,  16:33 Найти цитируемый пост)
про архивацию можно поподробнее?

можно. что конкретно интересует?

Цитата(MaGICaN @  20.7.2007,  16:33 Найти цитируемый пост)
но установить несмог

в чем это выражается? сопроводительную документацию читал?

Автор: MaGICaN 21.7.2007, 12:50
>рекурсивно перебираем все папки, начиная от корня. если проще говоря: находим все папки корня, находим все папки в первой папке, находим все папки...
за подробностями -- в поиск (обсуждалось примерно столько же раз сколько и простой поиск)

Немог бы ты показать пример поиски файла по винчестеру и определение адреса дирректории в которой он находится, я долго читал форум но ничего подобного, по моему вопросу найти несмог.


>в чем это выражается? сопроводительную документацию читал?


В сопроводительной документации только описание компонента.
Я знаю точно что snowy работал с этим компонентом(компонентом архивации), таккак он выкладывал на него ссыль на этом форуме, но достучаться до него немогу, если кто нибудь еше работал с этим компонентом плз отпишитесь тут как его устанавливать.

Заранее большое спасибо.

Автор: ne0n 21.7.2007, 14:54
Цитата(MaGICaN @  21.7.2007,  12:50 Найти цитируемый пост)
Немог бы ты показать пример поиски файла по винчестеру и определение адреса дирректории в которой он находится, я долго читал форум но ничего подобного, по моему вопросу найти несмог.


а че тут показывать как искать по дирректории ты знаешь, а по всему винчестеру не чуть не сложнее, тупо ищешь все локальники и уже ищешь по ним
Код



procedure ScanDir(Dir: string);
var
  SearchRec: TSearchRec;
  ras: string;
  sum: Dword;
begin
 if Dir <> '' then if Dir[length(Dir)] <> '\' then Dir := Dir + '\';
  // Осуществляем поиск по всем вложенным папкам
  if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
    //Ищем файлы с любым расширением
    repeat // пошел цикл
      //если имеет название "." или "..", тогда продолжаем
      if (SearchRec.name = '.') or (SearchRec.name = '..') then Continue;
      // если найден каталог то...
      if (SearchRec.Attr and faDirectory) <> 0 then
        ScanDir(Dir + SearchRec.name) //то проверим и его
      Else // иначе мы поймали файл
      begin
        Form1.label3.caption := dir + SearchRec.Name;//ПОЛНЫЙ ПУть файла
      // Можно в переменную забить а не в лабел
        ras := AnsiLowerCase(ExtractFileExt(dir + SearchRec.name));
        // Узнаем расширение найденного файла
        if (ras = '.txt')  then
        // И если оно  *.txt то...
        begin
        
       //АРХИВИРОВНИЕ!!!
  
           
        end;
      end;
      Application.ProcessMessages;
      if stopScan then // если stopScan=true , то ...
      begin
        Exit; // останавливаем поиск
      end;
    until FindNext(SearchRec) <> 0; 
   //Продолжаем поиск до тех пор, пока результат работы функции не равен нулю
  FindClose(SearchRec);
// завершаем поиск, освобождаем память, выделенный системой под него
end;  

...
procedure GetHDD;
var
  Drive: Char; //Буква диска
  n: byte; // счетчик дисков
  lst: TStringList; // переменная в которой будут храниться список дисков
const
  pref = ':\';
begin
  lst := TStringList.Create;
  lst.Clear;
  for Drive := 'A' to 'Z' do // перебираем буквы дисков
    if GetDriveType(PChar(Drive + pref)) = DRIVE_FIXED then 
    // и если диск не съемный то...
      lst.Add(Drive + pref); 
   //добавим в список дисков, которые нужно сканировать
  for n := 0 to (lst.Count - 1) do // по очереди начинаем сканировать
    ScanDir(lst.Strings[n]); // ScanDir – наша процедуру поиска файлов
  lst.Free;
end;



а по поводу архивации чем Zlib не подходит и примеров к нему полно...

Автор: MaGICaN 21.7.2007, 16:53
я нашел описание ZLib но вот только немогу понять как им пользоваться.
ссыль на него _http://pblog.ru/?p=67.
непонятно что там и как вызывается, я раньше за рамни дельфи никогда невыходил тоесть ниразу неписал программу которая использует сторонние файлы.
сори за ламерский вопрос  :-[ 

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