我想使用matlab的fwrite命令更改大型二进制文件中几个字节的值。我想要做的是使用fopen打开文件(filename,'r +',precision) 然后使用fread(fid,NUM,'int32')读取文件(这一切都有效)。一旦我到达我想要写入(覆盖)下一个字节的值的文件位置,我使用命令: 的fwrite(FID,变量名, 'INT32')。然后我关闭文件:fclose(fid)。
好的,然后我回去重新读取文件,这些字节没有改变!
这是不可能的?或者'r +'是错误的用法吗?
感谢。
答案 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);