MATLAB FREAD / FWRITE

时间:2009-06-08 20:06:08

标签: file matlab file-io binary fwrite

我想使用matlab的fwrite命令更改大型二进制文件中几个字节的值。我想要做的是使用fopen打开文件(filename,'r +',precision) 然后使用fread(fid,NUM,'int32')读取文件(这一切都有效)。一旦我到达我想要写入(覆盖)下一个字节的值的文件位置,我使用命令: 的fwrite(FID,变量名, 'INT32')。然后我关闭文件:fclose(fid)。

好的,然后我回去重新读取文件,这些字节没有改变!

这是不可能的?或者'r +'是错误的用法吗?

感谢。

2 个答案:

答案 0 :(得分:6)

来自FOPEN的文档:

  

如果在更新模式下打开文件   (具有包含的权限值   '+'),你必须调用fseek或frewind   读写操作之间。对于   例如,你不能打电话给fread   然后是fwrite,或者随后是fwrite   通过fread,除非你打电话给fseek或   在他们之间放风。

简而言之,您需要在致电FSEEK之前致电FWRITE。事实上,如果您不需要从文件中读取任何内容,我只会使用FSEEK代替您对FREAD的调用。

答案 1 :(得分:0)

当你想知道要改变哪个字节时,要记住你必须跳过多少字节的数量(例如每个int或float 4个字节)。

bytesToSkip = 0;
not_the_value_you_want = true;
bytesPerValue = 4; %for a float or int

while not_the_value_you_want

...some code here...

  if 'this is it'

  not_the_value_you_want = false; % adapt this to your taste

  else

  bytesToSkip += bytesPerValue;

  end;

...maybe more code here...

end;

在以下后尝试:

fileID = fopen('YourFile.bin','w+');
fseek(fileID,bytesToSkip,'bof'); %'bof' stands for beginning of file
fwrite(fileID,newValue);
fclose(fileID);