2016-02-11 3 views
1

У меня есть класс с именем FolderHelper с методом ReadOnly - цель состоит в том, чтобы проверить, является ли указанный каталог доступным только для чтения и возвращает bool true или false.Папка (справочник) Только для чтения?

public static bool ReadOnly(string path) 
{ 
    DirectoryInfo directoryInfo = new DirectoryInfo(path); 

    if (directoryInfo.Attributes.HasFlag(FileAttributes.ReadOnly)) 
    { 
     return true; 
    } 
    return false; 
} 

Я установил каталог только для чтения, но метод всегда возвращает false - может ли кто-нибудь предложить какие-либо причины?

+1

Каталоги не могут быть сделаны только для чтения файловой системы Windows. –

+1

Посмотрите более внимательно на флажок [только для чтения] (http://imgur.com/5sEhR9d) –

ответ

3

Флаг Readonly может применяться только к файлам, а не к каталогам. Если вы попытаетесь установить этот флаг в каталог с помощью Windows Explorer, вы получите тот же результат - флаг не будет установлен в каталог, но может быть установлен/не задан в файлы, которые он содержит. Поскольку флаг нельзя установить в каталог - очевидно, вы не можете получить его из каталога.

Возможно, вам необходимо проверить права на запись в этом каталоге, чтобы определить, может ли пользователь создавать/изменять файлы, содержащиеся в этом каталоге. Вы можете использовать Directory.GetAccessControl, чтобы проверить его.

+0

1 вверх. Вы можете упомянуть, что флаг 'не будет установлен, но он будет установлен/не установлен для всех содержащих файлы только ' –

+0

@MichaelMairegger reasonalbe дополнение, спасибо. –

+0

Это предложение было задано несколько раз здесь http://stackoverflow.com/questions/1410127/c-sharp-test-if-user-has-write-access-to-a-folder – Ggalla1779

-1

Нашел на другую статью StackOverflow и может быть это то, что вам нужно сделать

C# Test if user has write access to a folder

public bool IsReadOnly(string dirPath) 
    { 
     try 
     { 
      using (FileStream fs = File.Create(
       Path.Combine(
        dirPath, 
        Path.GetRandomFileName() 
       ), 
       1, 
       FileOptions.DeleteOnClose) 
      ) 
      { } 
      return false; 
     } 
     catch 
     { 

       return true; 
     } 
    } 
+0

@downvoter ... Pls объясните, чтобы я мог улучшить свой ответ – Viru

Смежные вопросы