Копирование Файлов

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

namomelkor
Сообщения: 227
Зарегистрирован: 31 авг 2006, 13:11

23 мар 2007, 10:39

Я юзаю вот такую процедуру(получает список всех файлов и папок в указанной директории и поддиректориях )

Код: Выделить всё

procedure UpdateFilesD(partstr:string);
  function DirectoryName(name: string): boolean;
  begin
    result := (name > '.') and (name > '..');
  end;
var
  sr: TSearchRec;
  li: TListItem;
  fi: TSHFileInfo;
  ext: string;
  IconIndex: word;
  ic: TIcon;
  sz:int64;
begin
  if FindFirst(partstr + '*.*', faAnyFile, sr) = 0 then
    repeat
      if (sr.Attr and faDirectory > 0)  then
        begin
        if DirectoryName(sr.name) then begin
        UpdateFilesD(partstr+sr.name+'\');
        continue;
        end
        else
        continue;
        end;
      li := Form1.ListView1.Items.Add;
      li.Caption := partstr+sr.name;
      ext := LowerCase(ExtractFileExt(li.Caption));
      ShGetFileInfo(PChar('*' + ext), 0, fi, SizeOf(fi),
      SHGFI_SMALLICON or SHGFI_SYSICONINDEX or SHGFI_TYPENAME);
       li.ImageIndex := fi.iIcon;
      sz:=sr.FindData.nFileSizeHigh*256*256*256*256+sr.FindData.nFileSizeLow;
      if (sz / 1024) < 1024 then
        li.SubItems.Add(IntToStr(round(sz / 1024)) + ' byte')
      else
      if (sz / 1024) < 1024 * 1024 then
        li.SubItems.Add(IntToStr(round((sz / 1024) / 1024)) + ' KByte')
      else
      if (sz / 1024) < 1024 * 1024 * 1024 then
        li.SubItems.Add(IntToStr(round(sz / 1024 / (1024 * 1024))) + ' MByte')
        else
        li.SubItems.Add(IntToStr(round(sz / 1024 / (1024 * 1024 * 1024))) + ' GByte');
      li.SubItems.Add(fi.szTypeName);
    until
      FindNext(sr) <> 0;
      if fldir=true then
      begin
      li := Form1.ListView1.Items.Add;
      li.Caption := partstr;
      end else
      fldir:=true;
  FindClose(sr);
end;
Юзаю так:

Код: Выделить всё

  Form1.ListView1.Items.BeginUpdate;
  Form1.ListView1.Items.Clear;
  UpdateFilesD(partstr);
  Form1.ListView1.Items.EndUpdate;
где partstr-путь к папке с '\' в конце

Правда в процедуре много лишнего но кому надо уберет ))
Blood_Magic
Сообщения: 268
Зарегистрирован: 30 июн 2005, 14:53

23 мар 2007, 23:53

Код: Выделить всё

  With T do
    begin
      Wnd:=0;
      wFunc:=FO_RENAME;
      pFrom:=PChar(AppDir+'\'+'Ini'+#0#0);// #0#0-Обязательно
      pTo:=PChar(AppDir+'\'+'CFG'+#0#0);// #0#0-Обязательно
      fFlags:=FOF_NOCONFIRMATION or FOF_NOERRORUI or FOF_SILENT;
    end;
  SHFileOperation(T);
Вот таг можно переименовать папку. Кроме FO_RENAME, можно еще FO_MOVE, FO_COPY, FO_DELETE.
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
Ответить