Показать сообщение отдельно
  #7  
Старый 14.08.2007, 16:40
Аватар для zip000
zip000 zip000 вне форума
Начинающий
 
Регистрация: 24.07.2007
Сообщения: 194
Репутация: 25
По умолчанию

Сорри. Код немного неправильный был, уже поправил.
Цитата:
Сообщение от DA54
И нормально ли это будет работать если файл не кратен 50кб?
Файл может быть любого размера (только его размер должен быть кратен 4, т.к. ты используешь Longword), здесь
Код:
    if fiPos + BufferSize < fiSize then
      BytesToRead := BufferSize
    else
      BytesToRead := fiSize - fiPos;
специально вычисляется сколько байт осталось прочитать в файле. Также можешь поэкспериментировать с размером буфера, посмотреть в каком случае быстрее всего будет шифроваться файл (размер буфера тож должен быть кратен 4).

Цитата:
Сообщение от DA54
Никогда не вникал в типы начинающиеся с Р,типа Pchar.Это как указатели в С++?
Да, это они самые.

Ну в принципе все просто. Сначала создаем сам буфер
Код:
GetMem(Buffer, BufferSize);
Потом в цикле сначала считаем сколько байт из файла надо прочесть. Собсно считываем данные в буфер
Код:
    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;
Освобождаем ресурсы.
__________________
Не профи, но и не чайник . D6 - лучше не придумали. Пока.
Ответить с цитированием