2014-10-24 2 views
0

System.IO.File.Copy не работает, когда исходный файл имеет атрибут только для чтения.Как скопировать файл только для чтения?

Копирование я получаю сообщение об ошибке:

Access to the path <destination> is denied. (System.UnauthorizedAccessException)

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

Почему я не могу копировать файл только для чтения таким образом и как я могу достичь того, что я хочу наиболее легко/разумно? И ... почему возникает исключение из файла , когда этот файл не создается?

Примечание: является ли скопированный файл только для чтения или нет, я не волнует, что это легко исправить

+0

см. После обновления –

+0

Только для чтения не мешает вам копировать файл, но он * предотвратит его перемещение. Либо пункт назначения доступен только для чтения, либо у вас нет разрешения на чтение для исходного файла. –

ответ

5

Вы поставили диагноз это неправильно. Копирование файлов никогда не произойдет, потому что источник доступен только для чтения. Копирование файлов завершится неудачно, если существующий файл назначения доступен только для чтения. Простое средство - очистить атрибут только для чтения в файле назначения перед копированием. Ответ от SLL здесь объясняет, как сделать это: How to remove a single Attribute (e.g. ReadOnly) from a File?

Скорее всего, что произошло в том, что:

  1. Вы скопировали файл из источника в пункт назначения. Путь назначения не существовал первоначально. Файл был скопирован успешно.
  2. Исходный исходный файл имеет набор атрибутов только для чтения. И поэтому атрибут был перенесен в файл назначения.
  3. Затем вы пытаетесь скопировать на тот же путь назначения, но поскольку файл с этим путем существует и имеет атрибут только для чтения, действие не выполняется.
+0

Исправить. Я не видел файл, потому что при копировании исходная временная метка была сохранена, поэтому я не видел, чтобы она отображалась (имена файлов все очень похожи), а затем файл _modification_ не удалось, поэтому он не менял метку времени. Благодаря! –

2

В файле system.io.file.copy ничего не мешает вам работать с файлом readonly, я думаю, ваша проблема в назначении. Поскольку ваш файл только для чтения, атрибут readonly копируется. Затем вы пытаетесь переопределить назначение с атрибутом readonly, который терпит неудачу. Проверьте, есть ли файл в месте назначения, прежде чем копировать файл.

Access to the path is denied. (System.UnauthorizedAccessException)

У вас нет доступа к папке назначения. Вы справляетесь с c: \? Убедитесь, что у пользователя есть права на запись в папке назначения.

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