Копирование папок с файлами при обработке
Код обрабатывает файлы и копирует их с папок в \Моя_папка. Как исправить код что бы с файлами копировались и папки в которых они были расположены?
То есть сейчас у меня есть папка: Test и в ней папки Test1 + Test2 + Test3 - Код обрабатывает все файлы (что в папках Test1 + Test2 + Test3) и копирует их в указанную папку - \Моя_папка.
А нужно что бы и с файлами копировались и папки в которых они расположены.
Var
f1, f2: File;
OldName, path, format, S: string;
file_list: TStringList;
flname1, flname2: string;
begin
file_list := TStringList.Create;
..............
// Тут идет цикл
for v := 0 to file_list.Count - 1 do
begin
flname1 := file_list.Strings[v];
// Формируем новое имя в файле
OldName := ExtractFilePath(Application.ExeName) + '\Моя_папка'; // Куда копировать
path := ExtractFilePath(OldName); // извлекаем путь до файла
format := extractfilename(flname1); // извлечь формат файла с цикла
// Вот тут и загвоздка !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
flname2 := path + 'NEW' + format; // Чтобы при формировании новых файлов с ними создавалась их папка
assignfile(f1, flname1); // От куда копировать
assignfile(f2, flname2); // Куда копировать
reset(f1, 1);
rewrite(f2, 1);
// обработка файлов
while not eof(f1) do
begin
.. .. .. и далее обработка файла
// Закрытие файлов
closefile(f1);
closefile(f2);
end;
Ответы (2 шт):
Для получения имени папки нам потребуется функция ExtractFileName. Она на самом деле возвращает строку, идущую после последнего разделителя, а это может быть как и имя файла, так и имя папки. Функция ExtractFilePath возвращает структуру папок с разделителем в конце, осталось только этот разделитель удалить в результате этой функции удалить.
function ExtractLastFolder(AFilename: string): string;
begin
Result := ExtractFilePath(AFilename);
Delete(Result, Length(Result), 1);
Result := ExtractFileName(Result);
end;
может тебе поможет вот этот ответ https://stackoverflow.com/questions/29183270/copy-everything-from-a-source-directory-to-a-new-directory-delphi-ex7 (через TDirectory.GetFiles и TPath.Combine, TFile.Copy)
Так же нашел функцию SHFileOperation (поcмотри там http://www.delphigroups.info/2/ac/412333.html)