【发布时间】:2015-08-16 08:09:52
【问题描述】:
我正在制作一个将文件从一个位置复制到另一个位置的应用程序,在我的应用程序中我使用线程池,因此可以一起完成几个副本。 当我尝试复制只读文件时,出现“拒绝访问”异常。为了解决这个问题,我使用以下命令将文件属性更改为 RW:
File.SetAttributes(fileName, File.getAttributes(fileName) & ~FileAttributes.ReadOnly);
文件属性更改成功,但复制命令:
File.Copy(fileName, destinationPath, true);
返回相同的“拒绝访问”异常。
当我在同一个文件上再次运行此应用程序时,一切都运行正常并且复制成功,因为文件属性在上次运行中发生了更改。 我的问题是为什么文件没有在第一个运行的应用程序中复制,即使我先更改了属性,然后我尝试复制文件?
【问题讨论】:
-
可能
access denied错误意味着该文件正在被另一个程序使用;这种情况可以尝试用FileStream("...", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);打开并手动复制 -
另外,也许您正试图覆盖只读文件,如下所述:stackoverflow.com/questions/18554108/…
-
Hmya,如果您希望它始终成功,请不要唤醒您的收缩包装的恶意软件。您可以先重命名文件,这样它就不会阻止您复制。然后删除重命名的文件,扫描完成后最终会消失。
标签: c# threadpool file-copying file-attributes