Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 119

/ вопрос открыт /

У меня возник вопрос!
Как можно скопировать папку со всеми подкаталогами и + прогрессБар,и хотелось бы узнать размер всего каталога!
И если можно разеснитн что как работает,ато хочется понать что как?
Ну вообщето скопировать я бы смог, но как найти в каталоге все подкатологи и в них все файлы?
Пожалуйста помогите!!!

unl0K Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: unl0K (статус: Посетитель)
Вопрос отправлен: 25 ноября 2008, 17:27
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 6; последнее сообщение — 26 ноября 2008, 11:56; участников в обсуждении: 4.
Вадим К

Вадим К (статус: Академик), 25 ноября 2008, 17:39 [#1]:

На сайте я уже вылаживал код, как это делается. Вся фишка в организации рекурсии. То ест, что такое найти размер каталога - это сумма размера файлов в этом каталоге плюс сумму размеров каталогов. которые в нем есть.
ищите по словам FindFirst/FindNext

Если кол-во файлов известно, то думаю проблем с прогрессом не будет.
Галочка "подтверждения прочтения" - вселенское зло.
unl0K

unl0K (статус: Посетитель), 25 ноября 2008, 17:42 [#2]:

чтот немогу найти если можно ссылку?
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Вадим К

Вадим К (статус: Академик), 25 ноября 2008, 17:52 [#3]:

Ну если бы искали... А так ведь нет, не искали на сайте. А я ведь дал ключевое слово для поиска!
вот, первой же странице нашёл ссылку с готовым ответом
http://expert.delphi.int.ru/question/1917/
Галочка "подтверждения прочтения" - вселенское зло.
unl0K

unl0K (статус: Посетитель), 25 ноября 2008, 17:59 [#4]:

Извените я просто страниц 3 лестнул не нашол и остановился так как с телефона в нете и скорость аж стыдно страничка грузится очень дого!

Спасибо Вадим!!
Относись к людям так, как хотел бы, чтобы они к тебе относились!
Anderson N.N

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-функцию, в которую, в свою очередь, передаются параметры: полный размер файла, сколько байт уже скопировано и др.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 13 июля 2020, 12:06
Выполнено за 0.02 сек.
Рейтинг@Mail.ru