删除临时目录

时间:2009-02-02 14:09:08

标签: delphi directory

我有这段代码,

showmessage('C:\TEMP\'+openfiles[openfilelist.ItemIndex].ID);
if removedir('C:\TEMP\'+openfiles[openfilelist.ItemIndex].ID) then
  showmessage('Removed')
else
  showmessage('Failed');

消息显示C:\TEMP\0,并且该目录确实存在,因为程序先前已创建并使用其中的文件,然后将其删除。我可以看到文件和目录,所以我知道他们在那里。程序成功删除文件但不删除目录。

如果我对其工作的目录进行硬编码 - 这意味着它接受该字符串 C:\TEMP\0但不接受C:\TEMP\'+openfiles[openfilelist.ItemIndex].ID等同于C:\TEMP\0。我无法对这些目录进行硬编码,所以我该怎么办?如何将字符串+字符串转换为期望的removedir()。我仔细研究了Delphi的基础知识,并期待一个字符串。

我很困惑,因为string + string = string。发生了什么事?

4 个答案:

答案 0 :(得分:8)

确保您的程序或任何其他程序都没有将该目录作为其当前工作目录。当您重新编译程序时,可能不再是这种情况,因此硬编码值对您来说可能是红色鲱鱼。

答案 1 :(得分:8)

除了其他好的答案之外,您不应该将您的临时文件夹存储在C:\ TEMP中。请改用GetTempFilename返回的值。与C:\ TEMP不同,此位置(因操作系统而异)将适用于所有操作系统以及所有级别的用户访问控制。这也消除了您硬编码的位置也可能被硬编码到另一个系统中的风险。

答案 2 :(得分:3)

如果我理解正确,openfiles[openfilelist.ItemIndex].ID是一个包含数字的字符串?
如果是这样,你检查它是否包含空白?像这样:

filename := 'C:\TEMP\' + trim(openfiles[openfilelist.ItemIndex].ID);
showmessage(filename);
if removedir(filename) then
   showmessage('Removed')
else
   showmessage('Failed');

答案 3 :(得分:0)

什么类型的对象是打开文件和打开文件列表?

他们是否完全打开文件夹,如果是这样,当您尝试删除文件夹时,它们可能仍处于打开状态。