| 
| 
 | Вопрос # 2 119/ вопрос открыт / | 
 |  У меня возник вопрос!Как можно скопировать папку со всеми подкаталогами и + прогрессБар,и хотелось бы узнать размер всего каталога!
 И если можно разеснитн что как работает,ато хочется понать что как?
 Ну вообщето скопировать я бы смог, но как найти в каталоге все подкатологи и в них все файлы?
 Пожалуйста помогите!!!
 
|  |   Вопрос задал: unl0K (статус: Посетитель)Вопрос отправлен: 25 ноября 2008, 17:27
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 6; последнее сообщение — 26 ноября 2008, 11:56; участников в обсуждении: 4. 
|   | Вадим К (статус: Академик), 25 ноября 2008, 17:39 [#1]:На сайте я уже вылаживал код, как это делается. Вся фишка в организации рекурсии. То ест, что такое найти размер каталога - это сумма размера файлов в этом каталоге плюс сумму размеров каталогов. которые в нем есть. ищите по словам FindFirst/FindNext
 
 Если кол-во файлов известно, то думаю проблем с прогрессом не будет.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | unl0K (статус: Посетитель), 25 ноября 2008, 17:42 [#2]:чтот немогу найти если можно ссылку? Относись к людям так, как хотел бы, чтобы они к тебе относились! |  
|   | Вадим К (статус: Академик), 25 ноября 2008, 17:52 [#3]:Ну если бы искали... А так ведь нет, не искали на сайте. А я ведь дал ключевое слово для поиска! вот, первой же странице нашёл ссылку с готовым ответом
 https://expert.delphi-int.ru/question/1917/
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | unl0K (статус: Посетитель), 25 ноября 2008, 17:59 [#4]:Извените я просто страниц 3 лестнул не нашол и остановился так как с телефона в нете и скорость аж стыдно страничка грузится очень дого! 
 Спасибо Вадим!!
 Относись к людям так, как хотел бы, чтобы они к тебе относились! |  
|   | Anderson N.N (статус: 2-ой класс), 26 ноября 2008, 01:15 [#5]:>> Копирование содержимого директории, вместе с поддиректориями. 
 Фукция копирует СОДЕРЖИМОЕ директории SourceDir в директорию TargetDir.
 Копируются все файлы, подкаталоги, и файлы находящиеся в этих подкаталогах.
 
 Аргумент StopIfNotAllCopied: если значение этого аргумента = True,
 то при первой же ошибке копирования файла или папки, работы функции
 прекратится а функуция вернёт False. В случае если этот аргумент = False,
 то ошибки копирования учитываться не будут.
 
 Аргумент OverWriteFiles: если True, то существующие файлы будут переписаны.
 
 Зависимости: SysUtils, FileCtrl, Windows
 
 ***************************************************** }
 
 function FullDirectoryCopy(SourceDir, TargetDir: string; StopIfNotAllCopied,
 OverWriteFiles: Boolean): Boolean;
 var
 SR: TSearchRec;
 I: Integer;
 begin
 Result := False;
 SourceDir := IncludeTrailingBackslash(SourceDir);
 TargetDir := IncludeTrailingBackslash(TargetDir);
 if not DirectoryExists(SourceDir) then
 Exit;
 if not ForceDirectories(TargetDir) then
 Exit;
 
 I := FindFirst(SourceDir + '*', faAnyFile, SR);
 try
 while I = 0 do
 begin
 if (SR.Name <> '') and (SR.Name <> '.') and (SR.Name <> '..') then
 begin
 if SR.Attr = faDirectory then
 Result := FullDirectoryCopy(SourceDir + SR.Name, TargetDir + SR.NAME,
 StopIfNotAllCopied, OverWriteFiles)
 else if not (not OverWriteFiles and FileExists(TargetDir + SR.Name))
 then
 Result := CopyFile(Pchar(SourceDir + SR.Name), Pchar(TargetDir +
 SR.Name), False)
 else
 Result := True;
 if not Result and StopIfNotAllCopied then
 exit;
 end;
 I := FindNext(SR);
 end;
 finally
 SysUtils.FindClose(SR);
 end;
 end;
 
 Пример использования:
 FullDirectoryCopy('C:\a', 'D:\b');
 // Скопирует содержимое директории C:\a (не не саму директорию) в директорию D:\b
 |  
|   | Косолапов Дмитрий Юрьевич (статус: 8-ой класс), 26 ноября 2008, 11:56 [#6]:Я хотел бы добавить, что для организаици прогресс-баров потенциально проще пользоваться функцией CopyFileEx, которая может использовать "волшебную" callback-функцию, в которую, в свою очередь, передаются параметры: полный размер файла, сколько байт уже скопировано и др. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |