Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > не компилится blockread


Автор: Iterator 25.2.2010, 08:37
добрый день,

нашел в delphiworld функцию для обработки файла, а вот функция blockread почему то не компилируется по причине несовместимости типов переменных
Код

type
  TByteSet = set of byte;


procedure ProcessFile(const InFileName, OutFileName:
  string; Valid: TByteSet);
var
  InFile, OutFile: file;
  InBuf, OutBuf: PByteArray;
  InPos, OutPos: word;
  BytesRead: word;
begin
  OutBuf := nil;
  New(InBuf);
  try
    New(OutBuf);
    AssignFile(InFile, InFileName);
    AssignFile(OutFile, OutFileName);
    Reset(InFile, 1);
    Rewrite(OutFile, 1);
    repeat
      Blockread(InFile, InBuf^, SizeOf(InBuf^), BytesRead);
      OutPos := 0;
      for InPos := 0 to BytesRead - 1 do
      begin
        if InBuf^[InPos] in Valid then
        begin
          inc(OutPos);
        end;
      end;
      if OutPos > 0 then
        BlockWrite(OutFile, OutBuf^, OutPos);
    until BytesRead <> SizeOf(InBuf^);
    CloseFile(InFile);
    CloseFile(OutFile);
  finally
    if OutBuf <> nil then
      Dispose(OutBuf);
    Dispose(InBuf);
  end;
end;


она с ошибкой или у меня delphi как то криво установился?

спасибо

Автор: salexn 26.2.2010, 15:42
1. BytesRead: word;
должен быть тип integer

2. (логическая ошибка)
Blockread(InFile, InBuf^, SizeOf(InBuf^), BytesRead);

тут не SizeOf(InBuf^) должно быть, а то по сколько байт ты хочешь читать, а сколько реально прочтено вернет BytesRead


Автор: Iterator 27.2.2010, 12:16
спасибо за подсказку.. а разве SizeOf(InBuf^) не возвращает размер буфера как integer?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)