С# как изменить атрибуты файла и скопировать

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

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

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

File.Copy(fileName, destinationPath, true);

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

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


person ShacharD    schedule 16.08.2015    source источник
comment
Возможно, ошибка access denied означала, что файл используется другой программой; в этом случае можно попробовать открыть его с помощью FileStream("...", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); и вручную скопировать   -  person Rubens Farias    schedule 16.08.2015
comment
Кроме того, возможно, вы пытаетесь перезаписать файл только для чтения, как описано здесь: stackoverflow.com/questions/18554108/   -  person Rubens Farias    schedule 16.08.2015
comment
Хмья, не пробуждайте вредоносное ПО, упакованное в сжатую упаковку, если вы хотите, чтобы оно всегда успешно работало. Вы можете сначала переименовать файл, чтобы он не мешал вам копировать. Затем удалите переименованный файл, он в конечном итоге исчезнет после завершения сканирования.   -  person Hans Passant    schedule 16.08.2015


Ответы (1)


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

person Matty2    schedule 16.08.2015