Разве это не размер Delphi TFileStream WriteBuffer Int64? Я могу писать только небольшие суммы за раз
Я пытаюсь написать более крупные фрагменты, чтобы увеличить скорость сохранения файла. У меня есть около 9 из этих циклов для преобразования, но я не могу понять, что я делаю неправильно
fs := TFileStream.Create(Myfile, fmCreate);
Этот код работает:
for RecordGroup := 0 to TotalGroups - 1 do
begin
for RecordNumber := 0 to Length(MyArray[RecordGroup]) - 1 do
begin
fs.WriteBuffer(MyArray[RecordGroup,RecordNumber],SizeOf(MyRecord));
end;
end;
Когда я удаляю innerloop для записи больших кусков, код не работает:
for RecordGroup := 0 to TotalGroups - 1 do
begin
fs.WriteBuffer(MyArray[RecordGroup],SizeOf(MyRecord) * Length(MyArray[RecordGroup]));
end;
Я получаю общую ошибку "Ошибка записи потока"
Значение SizeOf(MyRecord) * Length(MyArray[RecordGroup])
180 * 152 004 = 27 360 720
Все, что я прочитал, в основном говорит, что это правильно. Есть идеи, что я делаю не так?
Заранее спасибо за любые идеи, которые вы можете иметь.
1 ответ
Измените код записи на (отметьте дополнительные 0 в квадратных скобках)
fs.WriteBuffer(MyArray[RecordGroup, 0], SizeOf(MyRecord) * Length(MyArray[RecordGroup]));
Ошибка была в неправильном использовании динамического массива. Я предполагаю что MyArray
двумерный массив, так MyArray[RecordGroup]
1D динамический массив - по сути, указатель на данные - но нетипизированный var-параметр WriteBuffer
требует использования массива данных тела.
Обратите внимание: ваш счетчик циклов изменяется от 0 до TotalGroups
, так что общее количество циклов TotalGroups + 1
, Это правильно?