1

如何在 Matlab 中以编程方式安全地删除文件?我所说的“安全”是指:

  1. 单个删除语句最多删除一个文件,例如不删除通配符。delete(a*)应该删除文件a*,仅此而已!
  2. 单个删除语句不应有任何可能的副作用,例如 no system(sprintf('rm -f %s', foo))where foomay be file;some_command

目前,我遇到的代码system(sprintf('rm -f %s', foo))有一些foo. 我想将其替换为delete(foo),但根据文档, Matlabs -functiondelete接受通配符,因此不满足要求(1);如果输入包含*,我可能最终会删除许多文件。如何在 Matlab 中安全地删除文件?

当然,一种方法是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

这将只删除一个文件。如果有多个匹配项,该函数不会删除任何文件。

例子:

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 回答