Более элегантный способ читать и писать все доступные папки на диске [дубликат]

*args и **kwargs: позволяют передавать переменное количество аргументов функции.

*args: используется для отправки списка аргументов переменной длины без ключевого слова в функцию:

def args(normal_arg, *argv):
    print ("normal argument:",normal_arg)

    for arg in argv:
        print("Argument in list of arguments from *argv:", arg)

args('animals','fish','duck','bird')

Будет выдавать:

normal argument: animals
Argument in list of arguments from *argv: fish
Argument in list of arguments from *argv: duck
Argument in list of arguments from *argv: bird

**kwargs*

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

def who(**kwargs):
    if kwargs is not None:
        for key, value in kwargs.items():
            print ("Your %s is %s." %(key,value))

who (name="Nikola", last_name="Tesla", birthday = "7.10.1856", birthplace = "Croatia")  

Производит:

Your name is Nikola.
Your last_name is Tesla.
Your birthday is 7.10.1856.
Your birthplace is Croatia.
11
задан Fionnuala 25 February 2010 в 21:47
поделиться

3 ответа

Вам нужно использовать пространство имен Security.

См. этот ответ SO.

Из ответов:

FileIOPermission writePermission = new FileIOPermission(FileIOPermissionAccess.Write, filename);
if(!SecurityManager.IsGranted(writePermission))
{
  //No permission. 
  //Either throw an exception so this can be handled by a calling function
  //or inform the user that they do not have permission to write to the folder and return.
}

Обновление: (следующие комментарии)

FileIOPermission касается политик безопасности, а не прав на файловую систему, поэтому вам нужно использовать DirectoryInfo.GetAccessControl .

9
ответ дан Community 27 August 2018 в 15:40
поделиться
  • 1
    Я попробовал следующее: Dim readPermission As New FileIOPermission (FileIOPermissionAccess.Read, «C: \ Users \ Admin \ Documents \ My Pictures & quot;»). Вышеупомянутая попытка доступа к каталогу создает «Access Denied», но «SecurityManager.IsGranted» (readPermission ) & Quot; всегда возвращает true. – SharpAffair 25 February 2010 в 20:05
  • 2
    Из msdn.microsoft.com/en-us/library/… : Granting of permissions is determined by policy and is different from a demand subject to overrides, such as an assert. Also, IsGranted only tests the grant of the calling code assembly, independent of other callers on the stack. – Oded 25 February 2010 в 20:24
  • 3
    Это не правильный ответ. FileIOPermission имеет дело с CAS, а не с файловой системой. Другими словами, разрешает ли доступ к политике безопасности .NET. Вы можете иметь доступ к CAS, но Windows все равно может его отказать. Требуется DirectoryInfo.GetAccessControl (). – Hans Passant 25 February 2010 в 20:46
  • 4
    @HansPassant DirectoryInfo.GetAccessControl () может генерировать исключение, когда no read permission rights предоставлены. Но все же может быть право перечислить содержимое папки. В этом случае GetAccessControl () не поможет. – boboes 3 December 2015 в 00:44
  • 5
    На всякий случай кто-то заинтересован, я сделал небольшой фрагмент, используя GetAccessControl здесь – Chibueze Opata 18 May 2018 в 15:27

Проще говоря, вы не можете. Невозможно проверить, доступен ли каталог, все, что вы можете определить, это доступность. Причина, по которой, как только проверка завершится, разрешения могут быть изменены и аннулировать ваш чек. Наиболее надежной стратегией, которую вы можете реализовать, является доступ к каталогам и захват UnauthorizedAccessException.

Недавно я написал статью в блоге по этому вопросу, которая здесь немного подробнее

10
ответ дан JaredPar 27 August 2018 в 15:40
поделиться

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

-1
ответ дан JDMcK 27 August 2018 в 15:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: