Текущий архив: 2005.10.02;
Скачать: CL | DM;
Вниз
Чтение / запись. Найти похожие ветки
← →
Galiaf (2005-08-21 12:10) [0]Вот я беру exe-шник читаю его, потом записываю туда-же всё прочитанное, получаю файл который весит более 2 гигобайтов хотя он весил 300 kb.
procedure TForm1.Button1Click(Sender: TObject);
var
r: array of Char;
begin
f:=tfilestream.Create("e:\1.exe",fmopenread);
ii:=f.Seek(0, soFromEnd);
setlength(r,ii);
progressbar1.Max:=ii;
for i:=0 to ii do
begin
f.Read(r[i],i);
progressbar1.Position:=i;
end;
f.Free;
f:=tfilestream.Create("e:\1.exe", fmopenwrite);
for i:=0 to ii do
begin
f.Write(r[i],i);
progressbar1.Position:=i;
end;
f.Free;
end;
Что я опять начудил???
Может char это не то для чтения файлов, но что тогда?
← →
begin...end © (2005-08-21 12:20) [1]> Galiaf (21.08.05 12:10)
> ii:=f.Seek(0, soFromEnd)
> ...
> f.Read(r[i],i)
Во-первых, после выполнения первой из этих строк позиция внутри файла сместится в его конец. Поэтому при последующем вызове Read не будет читаться ничего. Для получения размера файла используйте свойство TStream.Size.
Во-вторых, второй параметр в Read означает количество байт, которые нужно прочитать. В данном случае оно должно быть равно единице, поскольку каждый раз читается один байт. Однако непонятно, зачем читать по одному байту, когда можно сразу заполнить весь массив содержимым файла.
> f.Write(r[i],i)
В-третьих, в цикле при записи количество записываемых байт тоже почему-то постоянно увеличивается.
← →
Galiaf (2005-08-21 12:40) [2]Заполнить весь массив содержимым файла?
f.read(r,TStream.Size);
так что ли, хотя я думаю что TStream.Size я использовал неправильно, напишите пожалуйста как правильно читать целеком и записывать. Возможно f.size но я неуверен.
← →
begin...end © (2005-08-21 12:51) [3]> Galiaf (21.08.05 12:40) [2]
Я бы сделал примерно так:var
R: array of Byte;
чтение:begin
with TFileStream.Create("e:\1.exe", fmOpenRead) do
try
SetLength(R, Size);
Read(R[0], Length(R))
finally
Free
end
end
запись:begin
with TFileStream.Create("e:\1.exe", fmOpenWrite) do
try
Write(R[0], Length(R))
finally
Free
end
end
Страницы: 1 вся ветка
Текущий архив: 2005.10.02;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.036 c