Ответ 1
Добавление примерного кода в ответ Тима:
using System.IO; File.SetAttributes(filePath, FileAttributes.Normal); File.Delete(filePath);
У меня есть каталог мусора, в котором я загружаю загрузки, одноразовые проекты, черновики и другие различные вещи, которые могут быть полезны в течение нескольких дней, но их не нужно сохранять навсегда. Чтобы эта директория не перехватила мой компьютер, я написал программу, которая удалит все файлы старше указанного количества дней и зарегистрирует некоторую статистику о количестве удаленных файлов и их размере только для удовольствия.
Я заметил, что несколько папок проекта живут намного дольше, чем нужно, поэтому я начал исследовать. В частности, казалось, что папки для проектов, в которых я использовал SVN, торчали вокруг. Оказывается, что файлы только для чтения в каталогах .svn не удаляются. Я просто сделал простой тест в файле только для чтения и обнаружил, что System.IO.File.Delete
и System.IO.FileInfo.Delete
не будут удалять файл только для чтения.
Мне не нужно защищать файлы в этом конкретном каталоге; если что-то важное в нем находится в неправильном месте. Есть ли класс .NET, который может удалять файлы только для чтения, или мне придется проверять атрибуты только для чтения и стирать их?
Добавление примерного кода в ответ Тима:
using System.IO; File.SetAttributes(filePath, FileAttributes.Normal); File.Delete(filePath);
Согласно File.Delete документации,, вам придется отключить атрибут только для чтения. Вы можете установить атрибуты файла с помощью File.SetAttributes().
Эквивалент, если вы работаете с объектом FileInfo
:
file.IsReadOnly = false;
file.Delete();
Зачем вам нужно проверять? Просто принудительно очистите флаг только для чтения и удалите файл.
Мне кажется, я предпочел бы поставить
>del /F *
в запланированную задачу. Может быть, завернут пакетным файлом для регистрации статистики.
Я что-то пропустил?