在Matlab中安全删除文件,不存在删除其他文件或执行任意代码的风险

时间:2012-08-10 08:38:03

标签: matlab security file-io delete-file

如何在Matlab中安全地以编程方式删除文件?通过'安全',我的意思是:

  1. 单个删除语句最多删除一个文件,例如没有通配符。 delete(a*)应删除文件a*,而不删除任何内容!
  2. 单个删除声明不得有任何可能的副作用,例如:没有system(sprintf('rm -f %s', foo)) foo可能是file;some_command
  3. 目前,我遇到的代码有system(sprintf('rm -f %s', foo)),其中有一些foo的卫生设施。我想用delete(foo)替换它,但根据documentation,Matlabs delete - 函数接受通配符,因此不满足要求(1);如果输入包含*,我可能最终会删除许多文件。如何在Matlab中安全删除文件?

    当然,一种方法是通过删除foo等字符来清理:=, ()*<>!?%;。但首先这是一种迂回的方式,其次,这不允许我删除包含这些字符的文件。

3 个答案:

答案 0 :(得分:2)

我能想到的最好方法是通过Java。您可能知道,您可以直接从Matlab编写Java语句。

还要考虑escaping特殊字符而不是删除。

答案 1 :(得分: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

答案 2 :(得分:0)

安全删除是什么意思?如果你想要提示问你确定要删除......?那么,Matlab(如C,C ++,Perl,Python,等等)给出你可以编写一个安全地包含对delete的调用的函数的工具。通过一些字符串操作,您可以编写函数来捕获仅使用通配符调用delete的尝试

或许recycle的{​​{1}}选项正是您所寻找的。

另外,请查看delete,然后在打开的对话框中查看底部的File | Preferences选项。