Re[3]: Файлы и грабли - Microsoft way
От: Sharowarsheg  
Дата: 15.04.22 15:20
Оценка:
Здравствуйте, Kolesiki, Вы писали:

S>>А зачем ты в своей помоечке отмечаешь файлы readonly?


K>А кто тебе сказал, что я? Архив тоже может содержать такой атрибут. А может и не архив! К примеру, я получил граблями, удаляя мусор за Git'ом.


Если не ты, то значит, это был я. И правильно, нефига удалять файл, на который я поставил атрибут "только для чтения". Я зря его ставил чтоле.
Отредактировано 15.04.2022 15:22 Sharowarsheg . Предыдущая версия .
Re[2]: Файлы и грабли - Microsoft way
От: yenik  
Дата: 15.04.22 17:35
Оценка:
K>>Разумеется, я накарябал хелпер для адекватного удаления каталога.

НС>Сбрасывать атрибуты лучше не при удалении, а при распаковке.


Почему?
Re[3]: Файлы и грабли - Microsoft way
От: Ночной Смотрящий Россия  
Дата: 15.04.22 20:09
Оценка:
Здравствуйте, yenik, Вы писали:

НС>>Сбрасывать атрибуты лучше не при удалении, а при распаковке.

Y>Почему?

Потому что может бомбануть еще в каком нибудь коде.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[2]: Файлы и грабли - Microsoft way
От: karbofos42 Россия  
Дата: 16.04.22 06:08
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Kolesiki, Вы писали:


K>>Разумеется, я накарябал хелпер для адекватного удаления каталога.


НС>Сбрасывать атрибуты лучше не при удалении, а при распаковке.


Лучше и там и там, а то в процессе существования файлов у них кто-то может аттрибуты поменять и тогда не удалится ничего.
Re[2]: Файлы и грабли - Microsoft way
От: Kolesiki  
Дата: 18.04.22 01:53
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Kolesiki, Вы писали:


K>>Разумеется, я накарябал хелпер для адекватного удаления каталога.


НС>Сбрасывать атрибуты лучше не при удалении, а при распаковке.


Архив — чисто пример "помойки, которую надо удалить". В конкретно моём случае не удалялся мусор после Git'а (его .git/* ) — можно подумать, ОДИН ридонли файл имеет какой-то смысл....
Re[4]: Файлы и грабли - Microsoft way
От: yenik  
Дата: 20.04.22 07:35
Оценка: -1
НС>>>Сбрасывать атрибуты лучше не при удалении, а при распаковке.
Y>>Почему?

НС>Потому что может бомбануть еще в каком нибудь коде.


Если приложение создаёт файлы чисто для себя, то ему не стоит беспокоиться о чужом неведомом коде. Свой код надо оттестировать. А косяки чужих программ всё равно не предусмотришь. Качественный код от атрибутов файлов бомбить не должен. А некачественный может и на вполне легальной ситуации бомбануть.
Сбрасывать атрибуты при распаковке — это лишний код и затраты времени, которые могут быть вообще лишними. Например, чистка файлового мусора может выполняться внешней утилитой, которая надёжно обрабатывает все эти ситуации.
А при удалении я бы просто вызывал Directory.Delete(path, true) и ловил исключение. И только в случае исключения нужно делать перебор всех файлов со сбросом атрибута ReadOnly. И тогда снова Directory.Delete(path, true). А если и тут не смогла, то значит уже не смогла.
Re[5]: Файлы и грабли - Microsoft way
От: vaa  
Дата: 20.04.22 07:54
Оценка:
Здравствуйте, yenik, Вы писали:

Y>А при удалении я бы просто вызывал Directory.Delete(path, true) и ловил исключение. И только в случае исключения нужно делать перебор всех файлов со сбросом атрибута ReadOnly.


Проблема только в том что мы делаем допущение о readonly, исключение об этом ничего не говорит, тогда уже надо сначала убедится, что действительно ReadOnly стал причиной исключения.

PS
Проверил в java удаляются ro-файлы.
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[6]: Файлы и грабли - Microsoft way
От: yenik  
Дата: 20.04.22 08:06
Оценка:
Y>>А при удалении я бы просто вызывал Directory.Delete(path, true) и ловил исключение. И только в случае исключения нужно делать перебор всех файлов со сбросом атрибута ReadOnly.

vaa>Проблема только в том что мы делаем допущение о readonly, исключение об этом ничего не говорит, тогда уже надо сначала убедится, что действительно ReadOnly стал причиной исключения.


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

vaa>PS

vaa>Проверил в java удаляются ro-файлы.


А в .NET вот так. По-простому форсированное удаление не сделать.
Re[6]: Файлы и грабли - Microsoft way
От: karbofos42 Россия  
Дата: 20.04.22 11:43
Оценка: 6 (1)
Здравствуйте, vaa, Вы писали:

vaa>Проблема только в том что мы делаем допущение о readonly, исключение об этом ничего не говорит, тогда уже надо сначала убедится, что действительно ReadOnly стал причиной исключения.


Так надо не допущение делать, а документацию смотреть.
В исходном сообщении был DirectoryInfo и там такой метод Delete, который кидает UnauthorizedAccessException именно для read-only.
Если же мы используем Directory, то у него другой метод Delete и он уже кидает IOException в случает read-only.
Re[5]: Файлы и грабли - Microsoft way
От: Kolesiki  
Дата: 25.04.22 20:51
Оценка:
Здравствуйте, yenik, Вы писали:

Y>А при удалении я бы просто вызывал Directory.Delete(path, true) и ловил исключение


Ну если совсем скучно — лови! Только зачем усложнять код? Больше задач нет, кроме как плясать вокруг M$ костылей? Снял "проблемные" атрибуты и удалил — вот и вся недолга.
Re[6]: Файлы и грабли - Microsoft way
От: yenik  
Дата: 27.04.22 13:03
Оценка: +1
Y>>А при удалении я бы просто вызывал Directory.Delete(path, true) и ловил исключение

K>Ну если совсем скучно — лови! Только зачем усложнять код? Больше задач нет, кроме как плясать вокруг M$ костылей? Снял "проблемные" атрибуты и удалил — вот и вся недолга.


Чтобы снять "проблемные" атрибуты, нужно перебрать файлы. С большой вероятностью файлов с такими атрибутами не найдётся, и эта работа окажется ненужной. Только углеродный след зря останется.
Поэтому перебор файлов со снятием атрибутов следует рассматривать как План Б, если по-простому удалить не получится.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.