Форум: "WinAPI";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
ВнизКопирование директории Найти похожие ветки
← →
aglar (2005-01-11 20:06) [0]Как скопировать директорию со всеми вложенными файлами и подкаталогами? Или как получить список всех файлов в каталоге в TStringList?
← →
maxz © (2005-01-11 21:52) [1]рекурсия, товарищ, только рекурсия....
← →
begin...end © (2005-01-11 22:29) [2]> aglar (11.01.05 20:06)
> Как скопировать директорию со всеми вложенными файлами и
> подкаталогами?
См. в справке описание API-функции SHFileOperation.
← →
Fay © (2005-01-12 13:13) [3]2 maxz © (11.01.05 21:52) [1]
Ничего подобного.
← →
aglar (2005-01-13 19:34) [4]2 Fay (c)
мы тебя внимательно слушаем ;)
← →
Вариант © (2005-01-14 17:28) [5]Вот на счёт копирования папки со всем вложенными фалами:
unit FilesOp;
interface
uses Forms, SysUtils, ShellAPI, Dialogs;
procedure CopyFiles(const FromFolder: string; const ToFolder: string);
implementation
procedure CopyFiles(const FromFolder: string; const ToFolder: string);
var
Fo : TSHFileOpStruct;
buffer : array[0..4096] of char;
p : pchar;
begin
FillChar(Buffer, sizeof(Buffer), #0);
p := @buffer;
StrECopy(p, PChar(FromFolder)); //директория, которую мы хотим скопировать
FillChar(Fo, sizeof(Fo), #0);
Fo.Wnd := Application.Handle;
Fo.wFunc := FO_COPY;
Fo.pFrom := @Buffer;
Fo.pTo := PChar(ToFolder); //куда будет скопирована директория
Fo.fFlags := 0;
if ((SHFileOperation(Fo) <> 0) or (Fo.fAnyOperationsAborted <> false)) then
ShowMessage("File copy process cancelled")
end;
end.
А вот по поводу списка файлов в каталоге:procedure ListFileDir(Path: string; FileList: TStrings);
var
SR: TSearchRec;
begin
if FindFirst(Path + "*.*", faAnyFile, SR) = 0 then
begin
repeat
if (SR.Attr <> faDirectory) then
begin
FileList.Add(SR.Name);
end;
until FindNext(SR) <> 0;
FindClose(SR);
end;
end;
//Использовать можно так
procedure TForm1.Button1Click(Sender: TObject);
begin
ListFileDir("C:\WINDOWS\", ListBox1.Items);
end;
← →
vlad_ri (2005-01-14 17:40) [6]Ещё вариантик:
function TForm1.CopyFolder(Owner: integer; Source,Destination: string; RenameOnCollision,Confirm: boolean): boolean;
const Aborted: Boolean = False;
var ShFileStructure: TSHFileOpStruct;
begin
While pos(";",Source)>0 do
Source[pos(";",Source)]:=#0;
While pos(";",Destination)>0 do
Destination[pos(";",Destination)]:=#0;
Source:=Source+#0#0;
Destination:=Destination+#0#0;
ShFileStructure.Wnd := Owner;
ShFileStructure.wFunc := FO_Copy;
ShFileStructure.pFrom := PChar(Source);
ShFileStructure.pTo := PChar(Destination);
ShFileStructure.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMMKDIR;
if RenameOnCollision then
ShFileStructure.fFlags := ShFileStructure.fFlags or FOF_RENAMEONCOLLISION;
if not Confirm then
ShFileStructure.fFlags := ShFileStructure.fFlags or FOF_NOCONFIRMATION;
ShFileStructure.fAnyOperationsAborted := Aborted;
ShFileStructure.hNameMappings := nil;
ShFileStructure.lpszProgressTitle := nil;
result:=(SHFileOperation(ShFileStructure)=0) and (not Aborted);
end;
← →
aglar (2005-01-17 10:00) [7]Всем спасибо!
← →
aglar (2005-01-17 10:00) [8]Всем спасибо!
← →
Fay © (2005-01-17 12:06) [9]2 aglar (13.01.05 19:34) [4]
Я имел ввиду, что рекурсия прекрасно разбирается в цикл. Во всяком случае прямая рекурсия.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c