如何多次保存而不覆盖文件

How to save several times without overwriting the file

我的 matlab 代码有问题。 我有一个矩阵 C(将形状重塑为一个向量),我想将几​​个 C 向量保存到一个文件中。这是我的代码

wynik = reshape(C',1,[]);
    fileID = fopen('Desktop\test.txt','r');
    fileID_out = fopen('Desktop\test_out.txt','r');

  fprintf(fileID, '%d \r', wynik);
  fprintf(fileID, '\n');
  fprintf(fileID_out, ' %d \r\n', 2);
 end 

我在开始时做了一个循环,所以在控制台中我有例如 2 个不同的矩阵,但是使用这段代码它会覆盖我的文件并且我只保存最后一个向量。我想要这样的东西(较短的例子) A = [ 1 2 3; 4 5 6 ](第一个循环) A = [7 8 9; 1 2 3 ](第二个循环) 在我的文件中(值之间有空格,行尾有 \n):

1 2 3 4 5 6
7 8 9 1 2 3

你问题中的例子很不清楚,因为你问的是保存数据,但你所有的文件打开指令只使用阅读权限。

我会给你一个适用于你的第二个(较短的)例子的例子,因为它更清楚你想要达到的目标。

我强烈建议阅读以下文档:

  • fopen,特别是参数permission.
  • 的用法
  • fprintf 参数 formatSpec 会有用。

有了该文档,您将意识到写入已包含数据的现有文件称为 append 到文件。因此,对于您的用法:第一次创建文件时,使用 'w' 权限打开它。对于所有其他时间你想 add (=append) 一些东西到文件,打开它有权限'a',然后正常写入。

你的第二个代码示例:

%% Initial data
A = [1,2,3;4,5,6];

%% prepare format specifier for a complete line
nElem = numel(A) ;
baseformat = '%d ' ;                                % base number format
writeFormat = repmat( baseformat , 1 , nElem ) ;    % replicated "nElem" times
writeFormat = [writeFormat(1:end-1) '\n'] ;         % remove last trailing space and replace by newline
% => now writeFormat = "%d %d %d %d %d %d\n"

%% Open the file the first time to write the first line
% permission 'w' => Open or create new file for writing. Discard existing contents, if any.
fidout = fopen('myfileout.txt', 'w') ; 
fprintf( fidout , writeFormat , A(:) ) ;
fclose(fidout) ;

%% Now let's write 5 additional lines
for iLine=1:5
    % simulate a different matrix [A]
    A = A + nElem ; % A will continue counting

    % permission 'a' => Open or create new file for writing. Append data to the end of the file.
    fidout = fopen('myfileout.txt', 'a') ; 
    fprintf( fidout , writeFormat , A(:) ) ;
    fclose(fidout) ;
end

应该会给你文件 myfileout.txt,包含:

1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36