|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Своевременное удаление папки
Здравствуйте, народ.
Столкнулся с такой проблемой. В ходе работы проги происходит перемещение папки в другое место (копирование, затем удаление). Использую стандартные функции SysUtils. После выполнения процедуры перемещения, все успешно перемещается, ошибок нигде не возникает. Но есть одно НО. Остаётся пустая папка, доступ к которой отсутствует. После закрытия программы, папка пропадает. А нужно, чтобы пропадала сразу. Может кто сталкивался? Где собака зарыта? |
#2
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |
#3
|
||||
|
||||
Цитата:
|
#4
|
|||
|
|||
Цитата:
Как узнать - чего закрыть нужно? |
#5
|
||||
|
||||
Цитата:
|
#6
|
|||
|
|||
Цитата:
Мне вот это не совсем понятно. Точнее совсем не понятно. Я с этим раньше вообще не сталкивался. |
#7
|
||||
|
||||
ты хоть фрагмент кода показал!!! было бы проще искать ошибку
уволен в запас!!! |
#8
|
|||
|
|||
Цитата:
Код:
function MoveToArc(SourceFile, DestDir: string; Directory: boolean): boolean; var FindFile: TSearchRec; begin Result := True; // Создаем папку DestDir if not CreateDir(PWideChar(DestDir)) then if GetLastError <> 183 then begin Result := False; Exit; end; if Directory then begin // Создаем директорию SourceFile в папке DestDir if not CreateDir(PWideChar(DestDir + '\' + ExtractFileName(SourceFile))) then if GetLastError <> 183 then begin Result := False; Exit; end; if FindFirst(SourceFile + '\*.*', faanyfile, FindFile) = 0 then begin repeat if FindFile.Attr <> faDirectory then if not MoveToArc(SourceFile + '\' + FindFile.Name, DestDir + '\' + ExtractFileName(SourceFile), False) then begin Result := False; Exit; end; until FindNext(FindFile) <> 0; FindClose(FindFile); if not RemoveDir(PWideChar(SourceFile)) then Result := False; end; end else begin if CopyFile(PWideChar(SourceFile), PWideChar(DestDir + '\' + ExtractFileName(SourceFile)), True) then begin if not DeleteFile(SourceFile) then Result := False; end else Result := False; end; end; |
#9
|
||||
|
||||
Обращает на себя внимание вот этот кусок кода:
Код:
if FindFirst(SourceFile + '\*.*', faanyfile, FindFile) = 0 then begin repeat if FindFile.Attr <> faDirectory then if not MoveToArc(SourceFile + '\' + FindFile.Name, DestDir + '\' + ExtractFileName(SourceFile), False) then begin Result := False; Exit; end; until FindNext(FindFile) <> 0; FindClose(FindFile); if not RemoveDir(PWideChar(SourceFile)) then Result := False; end; |
#10
|
||||
|
||||
юзай try finally.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#11
|
||||
|
||||
Кстати почему так странно делается перемещение файла?:
Цитата:
|
#12
|
|||
|
|||
Цитата:
Согласен. Упустил. Но дело не в этом. |
#13
|
||||
|
||||
Цитата:
В твоём случае это будет так: Код:
if FindFirst(SourceFile + '\*.*', faanyfile, FindFile) = 0 then begin try repeat if FindFile.Attr <> faDirectory then if not MoveToArc(SourceFile + '\' + FindFile.Name, DestDir + '\' + ExtractFileName(SourceFile), False) then begin Result := False; Exit; end; until FindNext(FindFile) <> 0; finally FindClose(FindFile); end; if not RemoveDir(PWideChar(SourceFile)) then Result := False; end; Если после этих изменений будет оставаться "пустая папка, доступ к которой отсутствует", значит ты не закрываешь хэндл ещё в другом месте (исходник которого ты не публиковал). Последний раз редактировалось poli-smen, 22.08.2012 в 10:51. |
#14
|
|||
|
|||
Цитата:
Видать так и есть. Я думал, может какими-то средствами можно отследить эти потоки приложения, а не руками и глазами. |
#15
|
|||
|
|||
Главное, что RemoveDir true выдает. И вроде как удаляет.
|