Я использую метод записи для прямой записи pixels
, который является array of array[(R, G, B)] of byte;
. pixels
правильно распределена следующим образом: setlength(pixels, 750000);
, что я делаю это следующим образом:FileWrite не записывает все байты
f := TFileStream.create(FileName, fmCreate);
written := f.write(pixels, 750000);
Проблема заключается в том, что метод записи возвращает 0, а именно его не написать байт из pixels
. С некоторых тестов, я обнаружил, что он копирует только до примерно 20000 байт, конечно, не более чем 30000, и момент я дать ему больше писать, это не .. и возвращает 0.
Я новичок в Pascal, но я не могу найти решение этой неприятной проблемы. Так что я делаю неправильно?
Я никогда не использовал компилятор fpc, но я задаюсь вопросом, что такое подпись на tFileStream.Write - можно ли ожидать 16-битного целого? –
@LorenPechtel Я не знаю. FPC заявляет: «Этот класс представляет собой инкапсуляцию системных процедур FileOpen, FileCreate, FileRead, FileWrite, FileSeek и FileClose, которые находятся в модуле SysUtils». Итак, FileWrite занимает много времени. – Malina
пишите пиксели [0], а затем освободите поток, чтобы убедиться, что файл закрыт (ОС все еще может кэшировать). 16-битная вещь не в этом, FPC использует sizeint или longint для таких вещей. –