2009-02-02 113 views
1

我有这样的代码,删除临时目录

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。到底是怎么回事?

回答

8

请确保您的程序和任何其他程序都不具有该目录作为其当前工作目录。当你重新编译这个程序时,这可能不再是这种情况,所以它可能是硬编码值为你工作的一个红字。

+0

+1 + A谢谢这是问题所在。 – Arthur 2009-02-02 22:12:30

3

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

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

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

0

什么类型的对象是openfiles和openfilelist?

他们是否打开所有文件夹,如果是这样,他们可能仍然打开时,试图删除该文件夹。

+0

否openfilelist是显示打开文件的列表框。 openfiles是一个包含许多值的自定义类型的数组,id是其中的一个值,它被定义为字符串[8],并且可以分配'0'和'99999999'之间的任意数字。这里没有实际的文件被触摸。 – Arthur 2009-02-02 21:51:21