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

有谁知道我做错了什么?我在 OS X 10.7.3 上运行 MATLAB 7.10.0。

  • 编辑 *

我想到了。请看下面我的回答。

4

3 回答 3

2

您应该查看作为 MATLAB 的一部分提供的tempdir和函数。tmpname它们旨在为您保证具有写访问权限的目录中的文件名提供绝对路径。请参阅MathWorks 网站上这两个函数的文档。

根据您看到的问题,我怀疑(和 nrz 一样)您正在将临时文件写入 MATLAB 的当前目录。这不仅会导致您在以后丢失文件以进行删除,而且有一天您会进入只读目录并且完全不走运!

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