我有一个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。
我明白了。请参阅下面的答案。
答案 0 :(得分:2)
您应该查看作为MATLAB一部分提供的tempdir
和tmpname
函数。它们旨在为您保证具有写访问权限的目录中的文件名提供绝对路径。请参阅the MathWorks web site上的两个功能的文档。
基于您所看到的问题我怀疑(就像nrz一样)您正在将临时文件写入MATLAB当前目录中。这不仅会导致您在以后删除文件以进行删除,而且有一天您将会进入只读目录并且完全运气不好!
答案 1 :(得分:1)
您使用的是相对文件名还是绝对文件名?如果您在循环内部使用cd
更改当前文件夹,或者您的代码调用的任何函数调用cd
而不返回原始文件夹,则相对文件名将无效。您可以使用pwd
检查当前文件夹。
可能的解决方案:1。避免cd
。 2.使用绝对文件名。
答案 2 :(得分:1)
我明白了。事实证明问题不在上面的片段中;它在我的代码中完全不同的部分。我在别处写临时文件,忘了删除它们。
结论:上面的代码段完全没有问题。 tempname
,recycle
和delete
是创建和销毁临时文件的绝佳功能。