
14.08.2007, 15:56
|
 |
Начинающий
|
|
Регистрация: 24.07.2007
Сообщения: 194
Репутация: 25
|
|
Код:
function CryptFile(FileIn, FileOut : String) : Boolean;
var
fi, fo : file of Byte;
Buffer : Pointer;
i, BytesToRead : Integer;
fiSize, fiPos : Longword;
l : PLongword;
const
BufferSize = 51200; // 50kb
begin
{$I-}
Result := False;
try
GetMem(Buffer, BufferSize);
except
Exit;
end;
AssignFile(fi, FileIn);
AssignFile(fo, FileOut);
Reset(fi);
Rewrite(fo);
fiSize := FileSize(fi);
fiPos := 0;
while fiPos < fiSize do begin
if fiPos + BufferSize < fiSize then
BytesToRead := BufferSize
else
BytesToRead := fiSize - fiPos;
BlockRead(fi, Buffer^, BytesToRead);
if IOResult <> 0 then
Break;
for i := 0 to (BytesToRead div 4) - 1 do begin
l := PLongword(Longword(Buffer) + i * 4);
l^ := crypt(l^, PASS);
end;
BlockWrite(fo, Buffer^, BytesToRead);
if IOResult <> 0 then
Break;
fiPos := fiPos + BytesToRead;
end;
FreeMem(Buffer, BufferSize);
CloseFile(fi);
CloseFile(fo);
Result := (fiPos = fiSize);
{$I+}
end;
А насчет скорости.. Когда я писал прогу для поиска файлов по сигнатурам в больших файлах (файлы данных в играх и т.д.) прирост скорости был ОЧЕНЬ большой : без буферизации 400кб/с, с - 20~30мб/с.
__________________
Не профи, но и не чайник . D6 - лучше не придумали. Пока.
|