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