2013-10-16 3 views
0

파일의 데이터를 읽고 배열에 저장하고 싶습니다. 그런 다음이 어레이에 새로운 데이터를 삽입 한 다음이 새로운 데이터를 같은 파일에 다시 저장하여 이미있는 데이터를 삭제하십시오. 내 코드는 완벽하게 작동합니다. fopen 매개 변수에 'r +'가있을 때 필요한 데이터를 제공합니다. 그러나 파일에 다시 쓸 때 이미 파일의 데이터를 삭제하지 않고 예상대로 끝까지 추가합니다. 그러나 'r +'대신 'w +'권한을 변경하면 코드가 실행되지만 데이터가 읽히지 않거나 파일에 쓴다! 누구나 이것이 왜 그런지 알 수 있습니까? 내 코드는 아래와 같습니다. 문서에 따르면파일 읽기 및 쓰기 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