Обновить

Комментарии 32

А это точно не ошибка в дизайне ядра (запрет на удаление открытых файлов)? ;)

Нет, молча удалять открытые кем то файлы это плохая затея, а вот добавить в диалоговое окно удаления файла кнопку - мне пофиг удаляй, было бы удобно.

Вот как раз дизайн ядра не позволяет добавить такую фичу. Разве что убить процессы, которые держат файл - но это ещё худшая затея.

лично я перегружаю комп, можно прямо из розетки. а после включения первым делом удалю файл/папку

так кто кнопка "мне п***й, удали" отличная была бы вещь

Была утилита FileLocker, которая отлично освобождала файлы без убиения процессов. (Пишут, что последние версии стали ставить создавать рекламные ярлыки и подменять поисковик в браузере).

А ещё был unlocker, который мог поставить в планировщик задачу на удаление при следующей загрузке.

Я неправильно указал название, возможно, мы говорим про одну и ту же утилиту. Я имел в виду её:

И пишут, как раз в версии 1.9.2 начались рекламные ярлыки и прочее.

Насколько понимаю оно, как и описанная в статье утилита handle от Руссиновича, позволяет закрыть хэндлы на файл из других процессов. Вопрос только как эти процессы на такое отреагируют.

Windows Explorer реагировал хорошо. А именно он чаще всего и лочил файлы.

Остальной софт пишут по-разному, кто-то после каждого вызова API проверяет результат вызова и GetLastError(), кто-то забивает на всё. Но сам API устроен так, что сами вызовы с невалидным хендлом окна приложение не роняют.

Понятно, что сам вызов просто вернёт INVALID_HANDLE - но далеко не все проверяют такое при чтении/записи, если открытие файла прошло нормально. И если это не Explorer, а какая нибудь программа видео редактирования, которая проработала над сведением финального ролика час и ещё часик остался, то уронить обидно.

Бесплатный совет, который хорошо давать в день свадьбы: не стоит принудительно забирать файл у программы видеоредактирования, которая проработала над сведением финального ролика час и ещё часик остался.

Windows Explorer реагировал хорошо

Не всегда.
Попробуйте убить расширение проводника.

Попробуйте…

Да я как-то за много последних лет с залочкой файла столкнулся лишь один раз. (По совпадению, это произошло позавчера, когда «Дом драконов» перезалили на торренты в середине скачивания, и когда я открыл в Explorer’е папку для проверки, Explorer успел прибрать к рукам файл, видимо, для построения thumbnail’а). Поэтому во времена XP я Unlocker ставил первым делом (и, по воспоминаниям, «Windows Explorer реагировал хорошо»), а теперь у меня Unlocker просто нет. И пробовать нечем. И ставить особо не хочу.

Может, компьютеры стали быстрее (особенно, SSD), и какой-то класс багов с гонками ушёл целиком.

Да, оно самое.

Про рекламу ничего сказать не могу - перестал пользоваться с момента перехода на вин 8.

Рекламный модуль был добавлен лишь в инсталлятор и при внимательной установке (если не тыкать бездумно "далее", "далее", "готово") ничего лишнего не установится.

Но Unlocker давно устарел и не может, например, корректно обработать ситуацию, когда пользователь выбрал несколько объектов (обрабатывает лишь первый)

Попытки найти альтернативный инструмент я описал здесь.

В итоге, остановился на утилите от eject. Она довольно бесцеремонно мочит все удерживающие файл процессы, но работает безотказно и молча. Если я отдал команду стереть объект, я могу быть уверен, что он будет стёрт.

Большое спасибо за рекомендацию, если понадобится, буду знать.

Да хотябы добавили бы какая программа, блин, её не даёт удалить, вместо "another programm" - уже бы было меньше головняка...

Да.. Необходимость лезть в консоль или ставить левые утилиты для базовой операции это провал UX

Удалите через журнал или как его там можно смотреть, в:

ПКМ пуск - управление компьютером - журнал (вроде) - приложение. Там в списке найти предупреждение, но 1Ску не всегда нормально отображает

Да ладно, во всех никсах (линукс, макось) это возможно и никого не напрягает. Удаляется запись о файле из каталога, а сам файл продолжает существовать, пока последний хэндл на него не закроется.

Т.е. цепочка inode продолжает существовать и кушать место на диске, но удалить её мы не можем т.к. на неё нет ссылки из каталога.

Именно. Удалится сама, как только файл отпустят (явно закроют или процесс умрёт). Отличие от виндозного подхода – уже можно записать новый файл под тем же именем.

Не то чтобы отличие критически важное (программа ведь может не держать файл постоянно открытым, а открывать, что-то делать и закрывать – тогда проблемы при удалении на ходу будут в любом случае), но в некоторых ситуациях это удобнее, чем невозможность удалить файл (например, свои временные файлы можно, открыв, сразу удалить – в windows для этого отдельное api).

Как минимум это удобно для апдейтов софта (особенно системных библиотек и запущенных при старте системы программ, файлы которых нельзя так просто закрыть).

Да. Но по-хорошему для возможности такого апдейта оный софт и библиотеки надо проектировать с оглядкой на эту возможность (например, открыв файл ресурсов при старте – так и держать его открытым до упора, не закрывая/открывая).

Не обязательно - но надо корректно обрабатывать изменение любого используемого файла в любой промежуток времени, кроме тех когда он открыт с соответствующим флагом.

При этом совершенно спокойно можно удалить фильм, открытый видеоплеером, например. Я так делал несколько раз.

Да, есть нюансы - если при открытии файла указать флаг FILE_SHARE_DELETE и дальше работать только через обычные read/write, удалять можно. Но использование memory mapping жёстко запрещает удаление до закрытия. Механизма отложенного удаления файла на диске после закрытия всех хендлов/дескрипторов, как в других ОС, нет.

Ваш плеер просто умнее чем Microsoft Word, который вцепляется в текстовик намертво, словно от этого зависит его жизнь)

Обычный PotPlayer

PowerToys File Locksmith реально классная фича, которую давно пора было встроить в дефолтный проводник. Не понимаю почему они тянули столько лет

Непригоден в ситуациях, когда файл никто не держит, но у текущего пользователя нет прав.

А хочется таки утилиту, которая мочила бы всё, потому что мне, как пользователю, нужно убить файл, а не слушать отмазки утилиты "ну его же не не держат, поэтому на этом я всё".

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Другие новости