3

コマンド ウィンドウから関数 (fopen と fclose を含む) を呼び出し、修正したエラーが MATLAB で発生した後 (修正を保存すると、プログラムのランタイムが停止します)、作成したファイルを削除して、プロセスを繰り返します。ただし、MATLAB は、どういうわけかファイルを開いたままにし、コマンド ウィンドウで fclose(f) と入力しても、MATLAB はファイルを手放しません。

function something(something)
    f = fopen('something.txt', 'w');        
    %statments with fprintf  
    fclose(f);    
end
4

2 に答える 2

5

関数の外からハンドル f にアクセスできない場合があります。その場合はfclose('all')、Matlab コマンド ウィンドウから試すことができます。

通常try .. catch ...、ファイルを使用するコードの前後にステートメントを使用することをお勧めします。これにより、エラーが発生した場合に常に fclose を呼び出してハンドルを解放できます。

それでもファイルを削除できず、別のプロセスによってロックされていないと想定している場合 (たとえば、Windows のメモ帳で外部からファイルを表示している場合)、Matlab からライブラリ関数を呼び出しており、共有ライブラリが保持している可能性があります。ファイルロック。この場合、unloadlibraryおよびloadlibraryコマンドを使用してライブラリを再ロードしてみてください。

于 2012-11-11T23:33:42.170 に答える
0

この場合、オブジェクトを使用するonCleanupと非常に便利です。

onCleanup使用するために書き直されたコードを次に示しますfclose。関数が正常に終了したとき、またはエラーが原因で終了したときに、 が呼び出されるようになりました。

function something(something)
    f = fopen('something.txt', 'w');        
    closer = onCleanup( @()fclose(f) );
    % statements with fprintf 
end

ドキュメントには、まさにこのケースの例も含まれています。

于 2012-11-12T11:42:36.863 に答える