Forum

Пожалуйста or Регистрация для создания сообщений и тем.

Как удалить файлы с атрибутом только для чтения?

Page 1 of 4Next

Добрый день! 🖐
Делаю программу которая удаляет все файлы в папке "E:\Data\Downloads", но у меня там могут быть файлы с атрибутом только для чтения.
На меня ругается компилятор, не знаю почему.
Как это правильно сделать?

Спойлер

Скопированоvoid Button1Click(object sender, EventArgs e)
Скопировано    {
Скопировано    ClrDir(@"E:\Data\Downloads");
Скопировано    }

Скопированоpublic static void ClrDir(string path)
Скопировано{
Скопировано    DirectoryInfo fldr = new DirectoryInfo(path);
Скопировано    foreach (FileInfo file in fldr.GetFiles)
Скопировано    {
Скопировано        file.IsReadOnly = false;
Скопировано        file.Delete();
Скопировано    }
Скопировано    foreach (DirectoryInfo dir in fldr.GetDirectories())
Скопировано        dir.Delete(true);
Скопировано} 

Добрый🖐.
Думаю добавить перед file.Delete строчку file.Attributes = FileAttributes.Normal;

Добрый день.
Ругается потому что СкопированоGetFiles()(скобки в конце).
Как-то никогда не заморачивался, но не думаю, что этот флаг будет мешать удалению.

Привет 🖐
Много раз переписывал подход к удалению всего и вся из каталога.
И вот уже два года не трогаю. Сделал окончательно и навсегда:

// Удалить всё содержимое
public static void EmptyFolder(string[] array, string mask)
{
    foreach (string x in array)
    {
        if (Directory.Exists(x))
        {
            try
            {
                Directory.GetFiles(x, mask, SearchOption.AllDirectories).AsParallel().ForAll(y =>
                {
                    try { File.SetAttributes(y, File.GetAttributes(y) & ~FileAttributes.ReadOnly); } catch { }
                    try { File.Delete(y); } catch { }
                });
                Directory.GetDirectories(x, mask, SearchOption.AllDirectories).AsParallel().ForAll(y =>
                {
                    try { Directory.Delete(y, true); } catch { }
                });
            }
            catch { }
        }
    }
}

Даже не пробуй Скопированоforeach менять на Скопировано.ToList().ForEach (в данном случае). Студия даже не напишет о вероятном конфликте потоков между AsPrallel и ForEach, и что готовое приложение гарантированно будет пропускать файлы из-за потоков в потоке.
Поэтому можешь даже не вникать в этот парадокс, просто бери именно Мой код, как есть, лучше уже не написать.

Удаленный пользователь, Удаленный пользователь и Удаленный пользователь отреагировали на эту запись.
Удаленный пользовательУдаленный пользовательУдаленный пользователь

Привет, и Спасибо XpucT! 🖐
Кто знает как этого потрошителя соединить чтобы он начал удалять?

Скриншот


Подскажите пожалуйста.

Добрый день.
Читайте внимательно, у вас же в сообщении об ошибке все написано, вы вместо массива Скопированоstring[] пытаетесь использовать одиночный Скопированоstring. Если у вас не массив, а одна строка, то пишите Скопировано{@"E:\Data\Downloads"}

P.S. Вам действительно удобно в белой теме работать?

Привет, Adler! 🖐
А как переключить SharpDevelop на темную тему?

Оффтоп
SharpDevelop не поддерживает темы =)

Упс. Никак, не досмотрел. Решил, что у вас VS...

Спасибо Вам всем за ответы.
У меня не работает так, но зато прекрасно работает вот так. Наверное старый NET Framework. SharpDevelop поддерживает максимум только 4.5.2.

Page 1 of 4Next