首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Matlab中安全删除文件,不需要删除其他文件或执行任意代码。

在Matlab中安全删除文件,不需要删除其他文件或执行任意代码。
EN

Stack Overflow用户
提问于 2012-08-10 08:38:03
回答 3查看 506关注 0票数 1

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

  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 delete-function接受通配符,因此不满足要求(1);如果输入包含*,我可能最终会删除许多文件。如何安全地删除Matlab中的文件?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-10 10:27:11

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

还可以考虑使用逃逸作为特殊字符,而不是移除。

票数 2
EN

Stack Overflow用户

发布于 2012-08-10 16:18:25

不如这样吧:

代码语言:javascript
复制
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

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

示例:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-08-10 09:05:41

你说安全删除是什么意思?如果你想要提示符,你确定要删除.吗?好吧,Matlab (如C、C++、Perl、Python等)为您提供了编写函数的工具,该函数可以安全地包装对delete的调用。使用少量的字符串操作,您可以编写函数,只捕捉使用通配符调用delete的尝试。

或者,您要寻找的可能是recycle选项delete

另外,请查看File | Preferences,并在打开的对话框中查看底部的Deleting files选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11898105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档