![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
volvo |
![]()
Сообщение
#21
|
Гость ![]() |
Стоп. Ну, удалил ты с диска папку вместе со всем ее содержимым (с диска-то она удаляется, надеюсь, к коду из DRKB претензий нет?). А как ты обновляешь содержимое TreeView? Или это у тебя MyRemoveDir так коверкает папки? (проверить не могу, Дельфи не установил еще)
|
Client |
![]()
Сообщение
#22
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Ок, стоп
![]() Дело как раз в том, что с диска не удаляется. (Почему-то сразу не сказал об этом ) Обновляю новым поиском файлов. Тут все нормально Путь Код D:\my folder - копия Папка в архиве (она только для теста, делал сам ![]() Добавлено через 9 мин. Сори, не тот архив (этот уже обработан программой) Вот что надо Прикрепленные файлы ![]() ![]() |
volvo |
![]()
Сообщение
#23
|
Гость ![]() |
Ты будешь смеяться, но...
До удаления: ![]() После удаления: ![]() Только я не перезапускаю поиск файлов заново. Я делаю так: procedure TForm1.deleteobject1Click(Sender: TObject); Так что все работает... |
Client |
![]()
Сообщение
#24
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
чудеса значит.
если просто удалить пустую - то все норм. причем в выбранной папке и во всех подпапках нету ни 1 файла Сообщение отредактировано: Client - 12.04.2010 18:51 Эскизы прикрепленных изображений ![]() ![]() ![]() |
volvo |
![]()
Сообщение
#25
|
Гость ![]() |
Кстати, на форуме forums.embarcadero.com великий и могучий (
![]() function MyRemoveDir(sDir: string): Boolean;Попробуй может это у тебя сработает (если все подпапки пустые)... В любом случае, как только установлю все ПО на Win7 - погоняю этот код там тоже... |
Client |
![]()
Сообщение
#26
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Проверенным методом трассировки выяснилось, что удаляются папки последнего уровня, в которых нет подкаталогов. Т.е. самый последний уровень удаляется и в системе он становится заблоченым, пока прогу не закроешь. Файлы удаляются свободно и в самой папке тоже обновляется, т.е. файл и для винды удаяется. Потом при попытке удалить надкаталог, функция возвращает результат false, т.е. надкаталок для последней папки уже не может удалиться, т.к. в нем все еще сидит "как бы уже удаленная" папка.
Воть ![]() Воткнуть бы какую - нибудь процедрку для обновления папки... ![]() Цитата Попробуй может это у тебя сработает (если все подпапки пустые)... Эффект точно такой же - удаляются только посление папки.Видимо все дело в висте |
volvo |
![]()
Сообщение
#27
|
Гость ![]() |
Цитата Т.е. самый последний уровень удаляется и в системе он становится заблоченым, пока прогу не закроешь. Хм... "Меня терзают смутные сомнения" (С). А у тебя, мил человек, эта папка, которая залочивается, случайно не текущая в твоем приложении? Тогда все так: пока приложение не закроешь - эту папку не удалишь с диска. Проверь это. И также проверь, какую ошибку возвращает GetLastError сразу после того, как RemoveDir вернула False (хотя подозреваю, что вернется 18: ERROR_NO_MORE_FILES, как результат того, что FindNext завершил обработку папки). Короче, проверяй, какая директория - текущая в приложении, или кто еще держит эту директорию, которая "как бы удаляется". Не помню, чтобы где-то всплывал разговор о подобном поведении Висты. Так что ошибка где-то в другом месте. |
Client |
![]()
Сообщение
#28
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Да, папку нельзя удалить.
Выдает ошибку 18 и 145. Хм, а как это исправить? |
volvo |
![]()
Сообщение
#29
|
Гость ![]() |
Цитата папка, которая залочивается, случайно не текущая в твоем приложении? Это я что, просто так спросил? Перед попыткой вызова RemoveDir смотри, что за папка В ДАННЫЙ МОМЕНТ является текущей. Если она совпадает (или является ПОДпапкой) той, что ты хочешь удалять - то можешь даже и не пытаться. Перебрасывай текущую папку куда-нибудь в другое место, и тогда пробуй удалять.Это все приколы Висты. (Показать/Скрыть)
|
Client |
![]()
Сообщение
#30
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Скорей всего это не из-за висты.
Вся работа с папкой - это заненесение в бд. т.е. связь с папкой остается в переменной типа TSearchRec если его не закрыть? У меня код для этого, анологичен коду из 2 поста этой темы. Именно после выполнения этого кода, папку нельзя удалить, пока не закрою прогу. Буду править код. Цитата что за папка В ДАННЫЙ МОМЕНТ является текущей хм, если бы я знал... ![]() Цитата Перебрасывай текущую папку куда-нибудь в другое место А это как? сделать поиск в другом каталоге?Сообщение отредактировано: Client - 12.04.2010 22:11 |
volvo |
![]()
Сообщение
#31
|
Гость ![]() |
|
Client |
![]()
Сообщение
#32
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
Все исправил, ошибка была при поиске файлов, видимо не все TSearchRec были закрыты.
Теперь файлы и папки удаляются ![]() А GetCurrentDirectory постоянно указывает на каталог Код C:\Users\Alex\Documents\RAD Studio\Projects но это не важно.Спасибо volvo за помощь, в который раз уже выручаешь ![]() |
Client |
![]()
Сообщение
#33
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
понадобилось вывести все элементы выбранной ветки.
procedure fillmemo (node : TTreeNode; st : string);выводит элементы до конца (самого последнего) от выбранного пункта. |
volvo |
![]()
Сообщение
#34
|
Гость ![]() |
Не совсем... Что именно требуется, расскажи?
|
Client |
![]()
Сообщение
#35
|
Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: ![]() ![]() ![]() |
УРААА
![]() сделал так, почти твой код ) procedure fillmemo (node : TTreeNode; st : string);Обожаю рекурсию ![]() Цитата Не совсем... Что именно требуется, расскажи? В моем варианте выделялись все элементы после выбранного, а надо было только его потомков.Эскизы прикрепленных изображений ![]() |
volvo |
![]()
Сообщение
#36
|
Гость ![]() |
Зачем лишние действия делать?
procedure FillMemo(node: TTreeNode; st : string);тоже выделяет только потомков, но не соседей... |
![]() ![]() |
![]() |
Текстовая версия | 14.09.2025 3:03 |