c# - File.Copy 方法使文件无法访问

标签 c# file-access

我为此苦苦挣扎了一段时间。调用 File.Copy 方法后无法访问文件。这是我尝试过的:

File.Copy(sourceFile, destinationFile, true);
FileStream fs = File.Open(destinationFile, FileMode.Open);

我在第二行收到 UnauthorizedAccessException。它说:访问路径...被拒绝。我也尝试过建议 here但这没有用。

感谢任何帮助。

编辑:这是我发现的。如果我这样做:

File.Copy(sourceFile, destinationFile, true);
FileStream fs = File.Open(destinationFile, FileMode.Open, FileAccess.Read);

它不会抛出异常。我试图访问的文件是只读的。所以,我尝试像这样删除只读属性:

File.Copy(sourceFile, destinationFile, true);
FileInfo fileInfo = new FileInfo(destinationFile);
fileInfo.IsReadOnly = false;
FileStream fs = File.Open(destinationFile, FileMode.Open, FileAccess.ReadWrite);

我得到了和以前一样的异常。顺便说一句,我检查了我是否可以手动打开文件并进行编辑,我可以。当然,当我取消选中只读复选框时。我还在调试时检查了 Windows 资源管理器中的文件属性,就在第三行之后,文件不再是只读的。检查完所有内容后,我不明白为什么会在第四行抛出异常。

最佳答案

您确定只有使用 File.Copy 复制的文件无法打开,而不是目标文件夹中的所有文件吗?这是常规 NTFS 文件夹还是网络共享?

如果您正在运行防病毒软件或安全软件,请尝试将其禁用。创建文件后,他们通常会打开文件进行扫描。

更新

根据 http://msdn.microsoft.com/en-us/library/b9skfh7s.aspx - File.Open 抛出的 UnauthorizedAccessException 不会给出消息“访问路径...被拒绝”。 (编辑:我也看不到 File.Copy 的消息,所以这可能是错误的)

我怀疑是您的 File.Copy 因该异常而失败,并且您无权读取源文件或写入目标文件。您可能正在查看突出显示的源代码行,它显示了要执行的下一行。

那么 - 也许您的副本失败了,而不是 File.Open

关于c# - File.Copy 方法使文件无法访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6251727/

相关文章:

c# - 正则表达式 "Full Name"到 "Abbreviated Name"

c# - 平滑滚动的垂直文本以获得进度

java - 这两种创建 InputStream 的方法之间是否存在访问权限差异?

php - 通过 Ajax 使用时,file_get_contents 和 file_put_contents 会产生干扰吗?

c# - GeckoFx 45 导航/返回/重新加载方法不起作用

c# - BackgroundWorker RunWorkerCompleted 事件

c# - 我做对了吗? (数组、枚举、结构)

windows - 检查目录的正确方法可用于写入

mysql - 让 VS2013/SSRS 永久使用 .SQL 文件,而不是手动粘贴/导入数据集查询

c++ - 如何等待文件存在(并被释放)?