2015-08-16 7 views
0

Я делаю приложение, которое копирует файлы из одного места в другое, в моем приложении я использую пул потоков, поэтому несколько копий могут быть выполнены вместе. Когда я попытался скопировать файл только для чтения, я получил исключение «отказ в доступе». Для того, чтобы исправить это я изменил файл атрибуты RW с помощью следующей команды:C# как изменить атрибуты файлов и копию

File.SetAttributes(fileName, File.getAttributes(fileName) & ~FileAttributes.ReadOnly); 

атрибуты файла был успешно изменен, но команды копирования:

File.Copy(fileName, destinationPath, true); 

вернулся тот же «отказано в доступе» исключение ,

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

+0

Возможно, ошибка «доступ запрещена» означает, что файл используется другой программой; в этом случае вы можете попробовать открыть его с помощью FileStream («...», FileMode.Open, FileAccess.Read, FileShare.ReadWrite); и вручную скопировать его –

+0

Также, возможно, вы пытаетесь перезаписать readonly файл, как описано здесь: http://stackoverflow.com/questions/18554108/c-sharp-unauthorizedaccessexception-in-file-copy –

+0

Hmya, не разбудите свою упакованную оболочку, если вы хотите, чтобы это последовательно преуспело. Вы можете сначала переименовать файл, чтобы он не мог остановить вас от копирования. Затем удалите переименованный файл, он исчезнет, ​​когда сканирование будет завершено. –

ответ

0

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