FileWrite 不写入所有字节

FileWrite doesn't write all bytes

我使用write方法直接写pixels,这是一个array of array[(R, G, B)] of byte;pixels 像这样正确分配:setlength(pixels, 750000); 我的做法如下:

f := TFileStream.create(FileName, fmCreate);
written := f.write(pixels, 750000);

问题是写入方法returns0,请注意它没有从pixels写入一个字节。 通过一些测试,我发现它最多只能复制大约 20000 个字节,当然不会超过 30000 个,而当我给它更多的内容来写时,它不会.. returns 0.


我是 Pascal 的新手,但我找不到解决这个令人不快的问题的方法。那我做错了什么?

stream.write 的第一个参数是所谓的形式参数,如 stream.write(const buf;size:integer) 等。

编译器获取您传递给它的任何地址并将其提供给过程。因为你在第一层使用了一个没有边界的数组(array of array..)它是一个动态数组所以在引擎盖下是一个指针。

如果给它传递数组,实际上传递的是存放指针的内存位置。解决方案:传递第一个元素,pixels[0],它是数据的位置。