0

我想从文件中读取数据并将其保存到数组中。然后在这个数组中插入一些新数据,然后将这些新数据保存回同一个文件中,删除已经存在的文件。我的代码完美运行,给了我所需的数据,当我在 fopen 参数中有 'r+' 时,但是当我再次写入文件时,它不会删除文件中已有的数据,只是按预期将其附加到末尾。但是,当我将权限更改为“w+”而不是“r+”时,我的代码运行但没有数据被读入或写入文件!有谁知道为什么会这样?我的代码如下所示。

N = 1021;
b = [0;0;0;0;0];
% Opens file specified by user.
fid = fopen('testing','w+'); 

% Read header data
Header = fread(fid, 140);
% Move to start of data

fseek(fid,140,'bof');

% Read from end of config header to end of file and save it in an array 
% called data
Data = fread(fid,inf);

Data=reshape(Data,N,[]);
b=repmat(b,[1 size(Data,2)]);
r=[b ; Data];
r=r(:);
r = [Header;r];
% write new values into file
fwrite(fid,r);

fclose(fid);

% Opens file specified by user.
fid = fopen('test'); 
All = fread(fid,inf);

fclose(fid); 
4

2 回答 2

1

根据文档, w+ 选项允许您“打开或创建新文件以进行读写。丢弃现有内容,如果有的话。” 文件的内容被丢弃,因此DataHeader为空。

于 2013-10-16T21:27:17.897 回答
0

您需要在写入之前设置文件句柄的位置指示器。您可以将frewind(fid)其设置为文件的开头,否则文件将写入/附加到当前位置。

N = 1021;
b = [0;0;0;0;0];
% Opens file specified by user.
fid = fopen('testing','r+'); 

% Read header data
Header = fread(fid, 140);
% Move to start of data

fseek(fid,140,'bof');

% Read from end of config header to end of file and save it in an array 
% called data
Data = fread(fid,inf);

Data=reshape(Data,N,[]);
b=repmat(b,[1 size(Data,2)]);
r=[b ; Data];
r=r(:);
r = [Header;r];
% write new values into file
frewind(fid);
fwrite(fid,r);

fclose(fid);

% Opens file specified by user.
fid = fopen('test'); 
All = fread(fid,inf);

fclose(fid);
于 2013-10-16T21:34:03.173 回答