2009-02-02 146 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