Показать сообщение отдельно
  #5  
Старый 14.08.2007, 15:56
Аватар для zip000
zip000 zip000 вне форума
Начинающий
 
Регистрация: 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 - лучше не придумали. Пока.
Ответить с цитированием