удаление только для чтения из папки, ее подпапок и всех файлов в ней - PullRequest
2 голосов
/ 05 апреля 2011

Есть ли способ удалить свойство "только для чтения"?

Я попробовал это:

var di = new DirectoryInfo("C:\\Work");
                di.Attributes &= ~FileAttributes.ReadOnly;

но это не делает работу

Ответы [ 3 ]

8 голосов
/ 05 апреля 2011

Почти, попробуйте:

var di = new DirectoryInfo("C:\\Work");

foreach (var file in di.GetFiles("*", SearchOption.AllDirectories)) 
    file.Attributes &= ~FileAttributes.ReadOnly;
1 голос
/ 19 февраля 2014

Лучший способ сделать это может быть.

string cmd = string.Format(" /C ATTRIB -R  \"{0}\\*.*\" /S /D", binPath);
CallCommandlineApp("cmd.exe", cmd);

private static bool CallCommandlineApp(string progPath, string arguments)
{
   var info = new ProcessStartInfo()
    {
        UseShellExecute = false,
        RedirectStandardOutput = true,
        FileName = progPath,
        Arguments = arguments

    };

    var proc = new Process()
    {
        StartInfo = info
    };
    proc.Start();

    using (StreamReader stReader = proc.StandardOutput)
    {
        string output = stReader.ReadToEnd();
        Console.WriteLine(output);

    }

    // TODO: Do something with standard error. 
    proc.WaitForExit();
    return (proc.ExitCode == 0) ? true : false;
}

Я столкнулся с такой странной проблемой, как желание очистить флаг чтения / записи каталога и любых вложенных файлов / каталогов, которые у него могут быть.И использование цикла foreach звучит как дополнительная работа, когда функция командной строки Attrib работает просто отлично и почти мгновенно.

0 голосов
/ 05 апреля 2011

Это то, что я нашел с помощью поиска Google.

File.SetAttributes(filePath, File.GetAttributes(filePath) & ~(FileAttributes.ReadOnly));

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...