0

一時ファイルをディスクに書き込み、使い終わったらこれらのファイルを削除する必要があるMATLABスクリプトがあります。問題のコードは何度も実行されるループ内にあるため、(一時ディレクトリにファイルを蓄積させるのではなく)自分でファイルを削除することが重要です。ファイルがすぐに削除されない場合、スクリプトはすぐに大量のディスク領域を占有します。

以下のコードスニペットは機能すると思いましたが、それを単独で実行すると機能します。ただし、何らかの理由で、スニペットを大きなスクリプトに含めるとスニペットが失敗します。一時ファイルが削除されたり、一時ディレクトリが乱雑になったりすることはありません。

    % create temporary file
    myTmpFile = [tempname '.wav'];
    fs = 32000;
    wavwrite(zeros(fs,1),fs,myTmpFile);


    % use the file here


    % delete the file when we're done
    prevState = recycle('off'); % turn recycle off to permanently delete files
    delete(myTmpFile)
    recycle(prevState);         % restore the state of recycle

誰かが私が間違っていることを知っていますか?OSX10.7.3でMATLAB7.10.0を実行しています。

  • 編集 *

私はそれを考え出した。以下の私の答えを参照してください。

4

3 に答える 3

2

MATLABの一部として出荷される関数tempdirと関数を確認する必要があります。これらは、書き込みアクセスが保証されているディレクトリ内のファイル名への絶対パスtmpnameを提供するように設計されています。MathWorks Webサイトで、両方の関数のドキュメントを参照してください。

あなたが見ている問題に基づいて、MATLABの現在のディレクトリであるものに一時ファイルを書き込んでいるのではないかと思います(nrzもそうです)。これにより、後で削除するためにファイルを追跡できなくなるだけでなく、いつの日か、読み取り専用のディレクトリに移動して、完全に運が悪くなる可能性があります。

于 2012-05-05T00:36:50.890 に答える
1

相対ファイル名または絶対ファイル名を使用していますか?ループ内で現在のフォルダーを変更しcdた場合、またはコードが呼び出した関数のいずれかがcd後で元のフォルダーに戻らずに呼び出された場合、相対ファイル名は機能しません。現在のフォルダは。で確認できますpwd

考えられる解決策:1。回避しcdます。2.絶対ファイル名を使用します。

于 2012-05-05T00:05:08.977 に答える
1

私はそれを考え出した。問題は上記のスニペットにはなかったことがわかりました。それは私のコードの完全に異なるセクションにありました。他の場所に一時ファイルを書き込んでいて、それらを削除するのを忘れていました。

結論:上記のスニペットにはまったく問題はありません。tempnamerecycleおよびdelete一時ファイルを作成および破棄するための完全に優れた関数です。

于 2012-05-05T03:39:37.760 に答える