Я думаю, что вы пропустили вопрос, и вы используете Delphi 2009+, а не Delphi 7. Я получил сообщение об ошибке в строке заголовка, пытаясь указать ваш точный код на Delphi 2010 (Unicode Delphi).Когда вы говорите:
var biggerfile: file of Char;
Вы объявляете biggerfile
файлом "записей", где каждая запись - Char
.На Unicode Delphi это 2 байта.Позже вы просите прочитать SizeOf(BufArray)
записей , а не байтов.То есть вы запрашиваете 4096 x 2 = 8192 записей .Но ваш буфер имеет всего 4096 записей, поэтому вы получаете странную ошибку.
Я смог исправить ваш код, просто заменив Char
на AnsiChar
, так как AnsiChar
имеет размер 1
, следовательно, SizeOf()
равняется Length()
.
Постоянное исправление должно включать переход от очень старых операций в стиле Паскаля file
к чему-то современному, основанному на TStream
.Я не уверен, что именно вы пытаетесь получить, но если вы просто хотите получить содержимое файла в виде строки, могу ли я предложить что-то вроде этого:
function ReadBiggerFile: AnsiString;
var
biggerfile: TFileStream;
begin
biggerfile := TFileStream.Create('C:\Users\Cosmin Prund\Downloads\AppWaveInstall201_385.exe', fmOpenRead or fmShareDenyWrite);
try
SetLength(Result, biggerfile.Size);
biggerfile.Read(Result[1], biggerfile.Size);
finally biggerfile.Free;
end;
end;