Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];

Вниз

TargetSource.CopyFrom(SourceSize, CopySize);   Найти похожие ветки 

 
Garacio ©   (2007-05-09 11:57) [0]

Помогите, пожалуйста, модернизировать код:
const
BlockSize = 65536;
. . .
var
ElapsedSize: Integer;
CopySize: Integer;
. . .
ElapsedSize := SourceStream.Size - SourceStream.Position;
while ElapsedSize > 0 do
begin
if ElapsedSize < BlockSize then
CopySize := ElapsedSize
else
CopySize := BlockSize;
TargetSource.CopyFrom(SourceSize, CopySize);
ElapsedSize := SourceStream.Size - SourceStream.Position;
end;
. . .

1. Как переделать этот код для копирования каталога (с подкаталогами)?
2. Я знаю, что сюда как-то можно приделать ProgressBar! Как это можно сделать?
3. Вопрос для знатоков: кроме XP и NT это будет работать в других ОС? А то я уже столкнулся с подобными ошибками!


 
Johnmen ©   (2007-05-09 14:02) [1]

У кого ты взял этот код с ошибками, у того и спрашивай.
Но тем не менее:
1. Никак, ибо он никаким образом не связан ни с каталогами, ни с файлами.
2. Только разобравшись в коде.
3. Нет, не будет работать. Например, в ОС7 ЕС.


 
Rial ©   (2007-05-09 15:16) [2]

1. Явно недостаточно скопировано кода.
Вообще очень подозрительно выбраны нужные строки.

2. Код содержит очевидные ошибки, даже без
раскрытия методов этих непонятных классов. Поищи.

3. Существует и не единственна операционка, на которых
это не будет работать. Пока что это вообще не работает. :)

4. Даже если все это заработает, то работать будет медленно,
т.к. методы .Position и .Size наверняка берут значения
не из переменных классов. %)


 
Belorus ©   (2007-05-09 16:42) [3]

> 4. Даже если все это заработает, то работать будет медленно,
>
> т.к. методы .Position и .Size наверняка берут значения
> не из переменных классов. %)

На основании чего такие выводы ?
Скорее всего обычное property Size read FSize; И всё.


 
Rial ©   (2007-05-09 17:27) [4]


> [3] Belorus ©   (09.05.07 16:42)
> На основании чего такие выводы ?
> Скорее всего обычное property Size read FSize; И всё.

Честно говоря, не знаю, с какими классами работает автор...
Но посмотри для интереса реализацию этих методов
у TFileStream. Они правильные, но в данных случае это
не самое лучшее решение.


 
Garacio ©   (2007-05-09 21:01) [5]

Вот ещё код достал! Как всегда, блин, для файлов!
Как для каталога с подкаталогами и вложениями переделать?
procedure FastFileCopy(const InfileName, OutFileName: string; SizeDone, SizeFile: LongInt);
const
BufSize = 3*4*4096;
type
PBuffer = ^TBuffer;
TBuffer = array [1..BufSize] of Byte;
var
Size : integer;
Buffer : PBuffer;
infile, outfile : file;
// SizeDone, SizeFile: Longint;
begin
if (InFileName <> OutFileName) then
begin
buffer := nil;
AssignFile(infile, InFileName);
System.Reset(infile, 1);
try
SizeFile := FileSize(infile);
AssignFile(outfile, OutFileName);
System.Rewrite(outfile, 1);
try
SizeDone := 0; New(Buffer);
repeat
BlockRead(infile, Buffer^, BufSize, Size);
Inc(SizeDone, Size);
FCopy.OneCopy.Progress := SizeDone;
FCopy.OneCopy.MaxValue := SizeFile;
BlockWrite(outfile,Buffer^, Size)
until Size < BufSize;
FileSetDate(TFileRec(outfile).Handle,
FileGetDate(TFileRec(infile).Handle));
finally
if Buffer <> nil then
Dispose(Buffer);
System.close(outfile)
end;
finally
System.close(infile);
end;
end
else
raise EInOutError.Create("File cannot be copied into itself");
end;


 
Rial ©   (2007-05-09 21:12) [6]

procedure CreateDirect(Const Name : String);
begin
If (DirectoryExists(Name))or(Length(Name) <= 0)then
 Exit;
CreateDirect(ExtractFileDir(Name));
CreateDir(Name);
end;

procedure DirCopy(Const InName, OutName : String);
Var
   SS : TSearchRec;
   Result : Integer;
begin
CreateDirect(OutName);
Result :=FindFirst(InName + "\*.*", faAnyFile, SS);
While (Result=0) do begin
 If (SS.Name <> ".")and(SS.Name <> "..") then
  If (SS.Attr and faDirectory = 0) then FileCopy(InName + "\" + SS.Name, OutName + "\" + SS.Name)
                                   else DirCopy(InName + "\" + SS.Name, OutName + "\" + SS.Name);
 Result :=FindNext(SS);
end;
FindClose(SS);
end;


 
Johnmen ©   (2007-05-09 21:31) [7]


> Вот ещё код достал!

Молодец! Такой стиль программирования сейчас самый модный!


 
Garacio ©   (2007-05-10 10:45) [8]

Спасибо,   Rial ©   (09.05.07 21:12) [6] !!!

Вот только остаётся индикатор подладить:
SizeDone := 0; // тут понятно - min=0
...
FCopy.OneCopy.Progress := SizeDone; //а как тут установить % от каталога, а не от файла?
FCopy.OneCopy.MaxValue := SizeFile; // тут я вычислю и установлю объём всего каталога



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.05.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.045 c
11-1160053393
Thaddy
2006-10-05 17:03
2007.05.27
New kol website


3-1173439204
Silver...
2007-03-09 14:20
2007.05.27
Как определить запись перед/над которой отпускаю Drop в DBGrid-e


1-1175337817
KOSik
2007-03-31 14:43
2007.05.27
watches выдает не то что должно быть по коду


9-1151909678
bulavkin
2006-07-03 10:54
2007.05.27
DelphiX --- И СНОВА КАРТА


3-1173273530
Silver...
2007-03-07 16:18
2007.05.27
Изменить порядок записей в DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский