Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Файлы директории и все что с ними связано...

10K
28 июля 2005 года
Stepler__
15 / / 19.07.2005
Кто нить подскажите хорошу функу для копирования директории (полностью)... Чтобы она возвращала скопированный размер... т.е. чтобы можно было подключить ПрогрессБар...
255
28 июля 2005 года
Dart Bobr
1.4K / / 09.04.2004
Цитата:
Originally posted by Stepler__
Кто нить подскажите хорошу функу для копирования директории (полностью)... Чтобы она возвращала скопированный размер... т.е. чтобы можно было подключить ПрогрессБар...


Ага, прямо в память кофеварки, для особо ленивых...
А рекурсивный обход слабо??

406
29 июля 2005 года
vitaly2003s
481 / / 27.07.2004
По моему SHFileOperation то что те надо
10K
03 августа 2005 года
Stepler__
15 / / 19.07.2005
Цитата:
Originally posted by Dart Bobr
Ага, прямо в память кофеварки, для особо ленивых...
А рекурсивный обход слабо??


Это ты типо вот таким предлагаешь?
function DirectorySize(SourceDir: string): Integer;
var
F: File of Byte;
SR: TSearchRec;
I: Integer;
begin
Result := 0;
SourceDir := IncludeTrailingBackslash(SourceDir);
If DirectoryExists(SourceDir)
then
begin
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 := Result + DirectorySize(SourceDir + SR.Name)
else
begin
AssignFile(F, SourceDir + SR.Name);
Try
Reset(F);
Result := Result + FileSize(F);
Finally
CloseFile(F);
end;
end;
end;
I := FindNext(SR);
end;
Finally
FindClose(SR);
end;
end;
end;

procedure CopyFileWithProgressBar(Source, Destination: string);
var
FromF, ToF: File of Byte;
Buffer: Array[0..4096] of Char;
NumRead: Integer;
FileLength: Longint;
begin
AssignFile(FromF, Source);
Reset(FromF);
AssignFile(ToF, Destination);
rewrite(ToF);
FileLength := FileSize(FromF);
With Form1.ProgressBar2 do
begin
Try
Min := 0;
Max := FileLength;
While FileLength > 0 do
begin
BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
FileLength := FileLength - NumRead;
BlockWrite(ToF, Buffer[0], NumRead);
Position := Position + NumRead;
Form1.ProgressBar1.Position := Form1.ProgressBar1.Position + NumRead;
end;
Finally
CloseFile(FromF);
CloseFile(ToF);
end;
Position := 0;
end;
end;

function FullDirectoryCopy(SourceDir, TargetDir: string; StopIfNotAllCopied,
OverWriteFiles: Boolean): Boolean;
var
SR: TSearchRec;
I: Integer;
begin
Result := False;
SourceDir := IncludeTrailingBackslash(SourceDir);
TargetDir := IncludeTrailingBackslash(TargetDir);
If DirectoryExists(SourceDir)
then
If ForceDirectories(TargetDir)
then
begin
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
CopyFileWithProgressBar(SourceDir + SR.Name, TargetDir + SR.Name)
else
Result := True;
If not Result and StopIfNotAllCopied
then
exit;
end;
I := FindNext(SR);
end;
Finally
FindClose(SR);
end;
end;
end;

Я то пробовал просто думал мож кто что нибудь получше подскажет... Здесь недостаток в том что тут при открытии системных файлов вылазит ошиька... О том что файл заблокирован...:P

255
03 августа 2005 года
Dart Bobr
1.4K / / 09.04.2004
Цитата:
Originally posted by Stepler__
Я то пробовал просто думал мож кто что нибудь получше подскажет... Здесь недостаток в том что тут при открытии системных файлов вылазит ошиька... О том что файл заблокирован...:P



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

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог