1

Matlabでファイルを安全かつプログラムで削除するにはどうすればよいですか?「安全に」とは、次のことを意味します。

  1. 単一の削除ステートメントは、最大で1つのファイルを削除します。たとえば、ワイルドカードは削除しません。delete(a*)ファイルだけを削除する必要がありa*ます!
  2. 単一の削除ステートメントには、起こりうる副作用はありません。たとえば、system(sprintf('rm -f %s', foo))どこにあるかはわかりfooませんfile;some_command

現在、私が遭遇したコードにsystem(sprintf('rm -f %s', foo))は、の衛生状態があるところがありfooます。に置き換えたかったのですが、ドキュメントdelete(foo)によると、Matlabs関数はワイルドカードを受け入れるため、要件(1)が満たされていません。入力にが含まれていると、多くのファイルが削除される可能性があります。Matlabでファイルを安全に削除するにはどうすればよいですか?delete*

もちろん、1つの方法は、fooなどの文字を削除してサニタイズすること:=, ()*<>!?%;です。しかし、第一に、これは回り道であり、第二に、それらの文字を含むファイルを削除することはできません。

4

3 に答える 3

2

私が考えることができる最善の方法は、Javaを使用することです。ご存知かもしれませんが、Matlabから直接Javaステートメントを作成できます。

また、削除するのではなく、特殊文字をエスケープすることを検討してください。

于 2012-08-10T10:27:11.663 に答える
2

次のようなものはどうですか?

function safe_delete(filename)
    %# listing
    d = dir(filename);
    d([d.isdir]) = [];   %# only files

    %# skip if more than one match or no match
    if isempty(d) || numel(d) > 1, return; end

    %# delete file
    p = fileparts(filename);
    delete( fullfile(p,d(1).name) );
end

これにより、1つのファイルだけが削除されます。一致するものが複数ある場合、関数はファイルを削除しません。

例:

safe_delete('file.txt')           %# delete file.txt if it exists
safe_delete('/path/to/file.txt')  %# also works with relative/absolute paths
safe_delete('*.txt')              %# doesn't do anything
safe_delete('/path/to')           %# doesn't delete directories only files
于 2012-08-10T16:18:25.243 に答える
0

安全に削除するとはどういう意味ですか?プロンプトを表示したい場合削除してもよろしいですか...?そうですね、Matlab(C、C ++、Perl、Pythonなど)は、への呼び出しを安全にラップする関数を作成するためのツールを提供しますdelete。少しの文字列操作deleteで、ワイルドカードを使用した呼び出しの試行のみをキャッチする関数を記述できます。

または、おそらくのrecycleオプションdeleteはあなたが探しているものです。

また、チェックアウトするFile | Preferencesと、開いたダイアログボックスでDeleting files下部のオプションが表示されます。

于 2012-08-10T09:05:41.707 に答える