Удаление временного каталога - PullRequest
1 голос
/ 02 февраля 2009

У меня есть этот код,

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, и он ожидает строку.

Я в замешательстве, так как строка + строка = строка. Что происходит?

Ответы [ 4 ]

8 голосов
/ 02 февраля 2009

Убедитесь, что ни ваша программа, ни какая-либо другая программа не имеют каталог в качестве своего текущего рабочего каталога. Когда вы перекомпилируете программу, это может больше не иметь места, поэтому это может быть красная сельдь, для которой работает жестко заданное значение.

8 голосов
/ 02 февраля 2009

В дополнение к другим хорошим ответам, вы не должны хранить вашу временную папку в C: \ TEMP. Вместо этого используйте значение, возвращаемое из GetTempFilename . В отличие от C: \ TEMP, это расположение (которое зависит от операционной системы) будет работать во всех операционных системах и на всех уровнях контроля доступа пользователей. Это также устраняет риск того, что местоположение, которое вы жестко закодировали, также может быть жестко закодировано в другой системе.

3 голосов
/ 02 февраля 2009

Если я правильно понял, openfiles[openfilelist.ItemIndex].ID это строка, содержащая число?
Если да, то вы проверили, что он не содержит пробелов? Примерно так:

filename := 'C:\TEMP\' + trim(openfiles[openfilelist.ItemIndex].ID);
showmessage(filename);
if removedir(filename) then
   showmessage('Removed')
else
   showmessage('Failed');
0 голосов
/ 02 февраля 2009

К какому типу объектов относятся openfile и openfilelist?

Открывают ли они папки вообще, если это так, они все еще могут быть открыты при попытке удалить папку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...