Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.27;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.033 c
1-1174765457
Дмитрий Белькевич
2007-03-24 22:44
2007.05.27
Можно ли в методе объекта узнать название метода?


1-1175191667
Kolan
2007-03-29 22:07
2007.05.27
Как сделать Wizzard?


3-1173595209
_kos
2007-03-11 09:40
2007.05.27
Подключение к удалённой mysql


2-1178524785
Konus
2007-05-07 11:59
2007.05.27
работа с TEdit, формат числа 1.11


15-1177291363
koha
2007-04-23 05:22
2007.05.27
Прочитал Джеффри РИХТЕР "Создание эффективных WIN32-приложений"





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский