Как удалить файлы с атрибутом только для чтения?
Цитата: Удаленный пользователь от 07.10.2021, 11:28Добрый день! 🖐
Делаю программу которая удаляет все файлы в папке "E:\Data\Downloads", но у меня там могут быть файлы с атрибутом только для чтения.
На меня ругается компилятор, не знаю почему.
Как это правильно сделать?[spoiler title="Спойлер"]
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);
}
[/spoiler]
Добрый день! 🖐
Делаю программу которая удаляет все файлы в папке "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);
Скопировано}
Цитата: Удаленный пользователь от 07.10.2021, 11:34Добрый🖐.
Думаю добавить перед file.Delete строчку file.Attributes = FileAttributes.Normal;
Добрый🖐.
Думаю добавить перед file.Delete строчку file.Attributes = FileAttributes.Normal;
Цитата: Удаленный пользователь от 07.10.2021, 11:43Добрый день.
Ругается потому чтоGetFiles()(скобки в конце).
Как-то никогда не заморачивался, но не думаю, что этот флаг будет мешать удалению.
Добрый день.
Ругается потому что СкопированоGetFiles()(скобки в конце).
Как-то никогда не заморачивался, но не думаю, что этот флаг будет мешать удалению.
Цитата: admin от 07.10.2021, 11:58Привет 🖐
Много раз переписывал подход к удалению всего и вся из каталога.
И вот уже два года не трогаю. Сделал окончательно и навсегда:// Удалить всё содержимое 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, и что готовое приложение гарантированно будет пропускать файлы из-за потоков в потоке.
Поэтому можешь даже не вникать в этот парадокс, просто бери именно Мой код, как есть, лучше уже не написать.
Привет 🖐
Много раз переписывал подход к удалению всего и вся из каталога.
И вот уже два года не трогаю. Сделал окончательно и навсегда:
// Удалить всё содержимое
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, и что готовое приложение гарантированно будет пропускать файлы из-за потоков в потоке.
Поэтому можешь даже не вникать в этот парадокс, просто бери именно Мой код, как есть, лучше уже не написать.
Цитата: Удаленный пользователь от 07.10.2021, 12:09Привет, и Спасибо XpucT! 🖐
Кто знает как этого потрошителя соединить чтобы он начал удалять?
[spoiler title="Скриншот"]
[/spoiler]Подскажите пожалуйста.
Привет, и Спасибо XpucT! 🖐
Кто знает как этого потрошителя соединить чтобы он начал удалять?
Подскажите пожалуйста.
Цитата: Удаленный пользователь от 07.10.2021, 12:15Добрый день.
Читайте внимательно, у вас же в сообщении об ошибке все написано, вы вместо массиваstring[]пытаетесь использовать одиночныйstring. Если у вас не массив, а одна строка, то пишите{@"E:\Data\Downloads"}P.S. Вам действительно удобно в белой теме работать?
Добрый день.
Читайте внимательно, у вас же в сообщении об ошибке все написано, вы вместо массива Скопированоstring[] пытаетесь использовать одиночный Скопированоstring. Если у вас не массив, а одна строка, то пишите Скопировано{@"E:\Data\Downloads"}
P.S. Вам действительно удобно в белой теме работать?
Цитата: Удаленный пользователь от 07.10.2021, 12:23Упс. Никак, не досмотрел. Решил, что у вас VS...
Упс. Никак, не досмотрел. Решил, что у вас VS...
Цитата: Удаленный пользователь от 07.10.2021, 12:35Спасибо Вам всем за ответы.
У меня не работает так, но зато прекрасно работает вот так. Наверное старый NET Framework. SharpDevelop поддерживает максимум только 4.5.2.
Спасибо Вам всем за ответы.
У меня не работает так, но зато прекрасно работает вот так. Наверное старый NET Framework. SharpDevelop поддерживает максимум только 4.5.2.
