Я использую функцию Files.move для перемещения файла, но она не наследует разрешения родительской папки

99% случаев, которые вы могли бы просто использовать:

sys.calls()[[1]] [[2]]

Он не будет работать для сумасшедших вызовов, где сценарий не является первым аргументом, то есть source(some args, file="myscript"). Используйте @ hadley в этих причудливых случаях.

0
задан Arnoud 30 January 2019 в 08:04
поделиться

2 ответа

Ваше наблюдение

В настоящее время перемещенные файлы сохраняют свои собственные разрешения ACL от того места, где они были созданы, что не соответствует ожиданиям.

Кажется, что ожидаемое поведение. После статьи службы поддержки Microsoft Как обрабатываются разрешения при копировании и перемещении файлов и папок .

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

0
ответ дан SubOptimal 30 January 2019 в 08:04
поделиться

Первый вопрос: хотите ли вы сделать его переносимым через Unix / Windows?

Поскольку каждая ОС имеет определенные атрибуты файла.


Для портативного решения (атрибуты, общие для большинства ОС):

  1. Получите BasicFileAttributes из целевой папки, в которой вы находитесь переход к. Например:

    BasicFileAttributes basicAttr = Files.readAttributes (file, BasicFileAttributes.class);

  2. Установить атрибуты к каждому перемещенному файлу

Для решения для конкретной ОС вместо BasicFileAttributes можно использовать:

  • DosFileAttributes для Windows:

    DosFileAttributes attrs = Files.readAttributes (file, DosFileAttributes.class);

    // Для получения значений атрибутов
    логическое значение isArchive = attrs.isArchive ()
    логическое значение isHidden = attrs.isHidden ()
    логический isReadOnly = attrs.isReadOnly ()
    логический isSystem = attrs.isSystem ()

    // для установки атрибутов в новом файле
    Files.setAttribute (newFile, "dos: archive", isArchive);
    Files.setAttribute (newFile, "dos: hidden", isHidden); [ 1117]
    Files.setAttribute (newFile, "dos: readonly", isReadOnly);
    Files.setAttribute (newFile, "dos: system", isSystem);

    [1122 ]


- Атрибуты PosixFile для Unix

0
ответ дан fidudidu 30 January 2019 в 08:04
поделиться
Другие вопросы по тегам:

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