我有一个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。
3条答案
按热度按时间wlsrxk511#
您应该查看作为MATLAB的一部分提供的
tempdir
和tempname
函数。它们被设计为提供到目录中文件名的 * 绝对 * 路径,在该目录中,您 * 保证 * 具有写访问权限。请参阅the MathWorks web site上这两个函数的文档。根据您看到的问题,我怀疑(nrz也是)您正在将临时文件写入MATLAB的当前目录。这不仅会导致你失去对文件的跟踪,以便以后删除文件,而且有一天你会在一个只读目录中结束,并且完全不走运!
inn6fuwd2#
你使用的是相对文件名还是绝对文件名?如果在循环中使用
cd
更改当前文件夹,或者如果代码调用的任何函数调用cd
而没有返回到原始文件夹,则相对文件名将不起作用。您可以使用pwd
检查当前文件夹。可能的解决方案:1.避免
cd
。2.使用绝对文件名。fhg3lkii3#
我想通了。事实证明,问题不在上面的代码片段中;它在我代码的另一个部分我在其他地方写临时文件,忘了删除它们。
底线是:上面的片段绝对没有错。
tempname
、recycle
和delete
是创建和销毁临时文件的完美函数。