我有一个文件,它是通过Matlab从带有二进制数据值的向量M
写入的。此文件是使用Matlab的fwrite
在myGenFile.m
形式的以下脚本function myGenFile(fName, M)
中编写的:
% open output file
fId = fopen(fName, 'W');
% start by writing some things to the file
fprintf(fId, '{DATA BITLENGTH:%d}', length(M));
fprintf(fId, '{DATA LIST-%d:#', ceil(length(M) / 8) + 1);
% pad to full bytes
lenRest = mod(length(M), 8);
M = [M, zeros(1, 8 - lenRest)];
% reverse order in bytes
M = reshape(M, 8, ceil(length(M) / 8));
MReversed = zeros(8, ceil(length(M) / 8));
for i = 1:8
MReversed(i,:) = M(9-i,:);
end
MM = reshape(MReversed, 1, 8*len8);
fwrite(fId, MM, 'ubit1');
% write some ending of the file
fprintf(fId, '}');
fclose(fId);
现在我想编写一个文件myAppendFile.m
,它会将一些值附加到现有文件中,并具有以下格式:function myAppendFile(newData, fName)
。要做到这一点,我将不得不删除尾随'}':
fId = fopen(nameFile,'r');
oldData = textscan(fId, '%s', 'Delimiter', '\n');
% remove the last character of the file; aka the ending '}'
oldData{end}{end} = oldData{end}{end}(1:end-1);
现在问题在于尝试将oldData
写入文件时(写newData
应该是微不足道的,因为它也是二进制数据的向量,如M
),因为它是包含字符串的单元格数组。
我如何克服此问题并正确附加新数据?
答案 0 :(得分:1)
不是使用将文件复制到内存中的textscan
,而是将其写回,您可以使用fseek
将指针设置为要继续写入的位置。只需在文件结束前加上一个字符并继续编写。
fseek(fid, -1, 'eof');