Скопировать все файлы из дерева в одну папку.

Возникла тут у меня задача обработать 103943 файла расположенных в 2618 папках.

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

Ну раз требует, то сделаем. За основу взял ту же процедуру, что выложил по ссылке выше.
Подумав немного получил на выходе:

procedure AllFiles2one( Path,path2: string );
var
sRec: TSearchRec;
isFound: boolean;
begin
try
mkdir(path2); // создаем папку куда все это копируем.
except
end;
isFound := FindFirst( Path + ‘\*.*’, faAnyFile, sRec ) = 0;
while isFound do
begin
if ( sRec.Name <> ‘.’ ) and ( sRec.Name <> ‘..’ ) then
begin
if ( sRec.Attr and faDirectory ) = faDirectory then
AllFiles2one( Path + ‘\’ + sRec.Name, path2) else

begin
//form1.Caption:=Path + ‘\’ + sRec.Name;    // раскомментируйте для того чтобы можно было следить за процессом выполнения. Хотя следить можно просто мониторя вес итоговой папки и сравнивая с начальной.
CopyFile(Pchar( Path + ‘\’ + sRec.Name ), Pchar( Path2 + ‘\’ + StringReplace( StringReplace(Path,’:\’,’_’,[]) + ‘_’ + sRec.Name,’\’,’_’,[rfReplaceAll] )),true);
end;

end;
Application.ProcessMessages;
isFound := FindNext( sRec ) = 0;
end;
FindClose( sRec );
end;

Сначала хотел обрезать путь до файла и так и копировать, но понял что туплю, потому что некоторые файлы могут иметь одно имя, и поэтому в процедуре каждый выходной файл имеет адрес своего пути. Переименовать их в обычные числа вы сможете вот этой моей прогой.

Процедура принимает входные данные:

Path — главный адрес с которого начать читать дерево.

Path2 — папка куда копировать.

!!ВНИМАНИЕ. ПРОЦЕДУРА КОПИРУЕТ ФАЙЛЫ, СЛЕДОВАТЕЛЬНО УЧИТЫВАЙТЕ ЭТО ОБРАБАТЫВАЯ БОЛЬШИЕ КАТАЛОГИ!!


Автор: Elsper.ru


VN:F [1.9.14_1148]
Rating: 0.0/10 (0 votes cast)

One thought on “Скопировать все файлы из дерева в одну папку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Спoнcopcкиe ссылки

наращивание ресниц в домашних условиях видео.