我有这段代码,
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。发生了什么事?
答案 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)
什么类型的对象是打开文件和打开文件列表?
他们是否完全打开文件夹,如果是这样,当您尝试删除文件夹时,它们可能仍处于打开状态。