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

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[flash] ОТКЛЮЧЕН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Копирование Файлов

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

Blood_Magic » 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.

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

namomelkor » 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-путь к папке с '\' в конце

Правда в процедуре много лишнего но кому надо уберет ))

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

somewhere » 22 мар 2007, 15:59

Тут где-то была тема получения списка файлов, сам лично функцию выкладывал, ищите...

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

Blood_Magic » 22 мар 2007, 12:47

есть умное копирование, если еще надо могу кинуть, дома есть на память не помню функцию

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

orivet » 16 мар 2007, 16:28

а copyfileto Кстати у меня нет...
а как работать одновременно с copyfile, extractfilename, findfirst я так и не понял там им каждому свой тип пути к файлу подавай: string, tsearchrec, pchar... жесть

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

orivet » 16 мар 2007, 16:24

да... видимо у меня навыки поиска галимые... спасибо за помощь!

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

BBB » 16 мар 2007, 16:16

orivet писал(а):аааааааааааааа блин я идиот... простите, есть copyfile
а умного копирования с директориями нет?
По-моему, "умного" копирования в WinAPI нет :)

Не исключено, то это уже кем-то написано. В виде какой-нбудь библиотеки или компонента.

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

orivet » 16 мар 2007, 14:19

аааааааааааааа блин я идиот... простите, есть copyfile
а умного копирования с директориями нет?
тоесть только смотреть список папок откуда и создавать его там куда копировать и тд?
ну дригими словами кучу процедур писать придеца без этого...

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

orivet » 16 мар 2007, 14:15

1) насчет небыло списка... это пофигу, на самом деле даже лучше когда он есть, чтобы человек мог воткнуть что происходит а не просто закрыть хрен пойми зачем вылезшее окошко, и, кстати, он и без нула ниче не показывает, чтобы показывал список надо дописывать парметр
2) насчет copyfile, copyfileex, copyfileto, с uses windows... не пашет... делфи 7... может сп1 надо?

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

BBB » 16 мар 2007, 13:49

orivet, А чтобы в консоли не было списка копируемых файлов, используй при вызове xcopy перенаправление консольного вывода в NUL. Пимерно так:

xcopy {тут твои параметры} > NUL

Вернуться к началу