2013-10-16 59 views
0

我想讀取文件中的數據並將其保存到數組中。然後在該數組中插入一些新數據,然後將這些新數據保存到同一個文件中,刪除已存在的數據。當我在fopen參數中有'r +'時,我的代碼工作完美,給了我所需的數據,但是當我再次寫入文件時,它不會刪除文件中已有的數據,只是將其追加到末尾。但是,當我將權限更改爲'w +'而不是'r +'時,我的代碼會運行,但是沒有數據讀入或寫入文件!任何人都知道爲什麼會出現這種情況?我的代碼如下所示。讀取和寫入文件matlab

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); 

回答

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); 
+0

完美的謝謝。 – user2887210

1

根據文檔,w +選項允許您「打開或創建新文件進行讀取和寫入,放棄現有內容(如果有)」。文件的內容被丟棄,所以DataHeader是空的。

+0

我明白這一點。然而,當我從「移動到數據的開始」註釋掉,所以我試圖做的是從文件中讀取數據,但它仍然不讀取任何數據,爲什麼?在它讀取數據之前它是否丟棄所有數據? – user2887210

+0

'fopen(...,'w +')'刪除內容。這是文檔中描述的行爲,通常以這種方式使用。 (例如當前會話錯誤日誌,用w +打開,如果沒有錯誤發生,則爲空) – Daniel