File.Copy抛出UnauthorizedAccessException

时间:2016-08-09 02:39:08

标签: c# .net tfs

我想知道是否还有其他人有类似的问题。

我的应用程序中有一个简单的文件复制代码,可以简化如下(我的用户打开VS2013调试代码可以完全控制源文件夹和目标文件夹层次结构 - 对于某些人来说并非如此原因,我尝试在管理员模式下运行VS无法正常工作,然后我手动对用户应用完全控制,无论如何错误都抱怨源文件夹)

// sourcefile was thought to be @"C:\tfs\Dev\Source\some-module\bin\Debug\mybinary.dll";
// retrieved through an environment variable, but was pointing to the folder instead of the file inside
Directory.CreateDirectory(myfolder);
File.Copy(sourcefile, Path.Combine(myfolder, Path.GetFileName(sourcefile)), true);

这段代码很愉快,直到我今天在我的本地机器上尝试它(并且仍在我的testbed机器上工作)。但出于某种原因,它开始抛出以下错误:

System.UnauthorizedAccessException: Access to the path 'C:\tfs\Dev\Source\some-module\bin\Debug' is denied.
Result StackTrace:  
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost)
   at System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite)

认为它可能是文件锁定问题,我重新启动并重新尝试,但失败了。

源文件夹具有只读属性,并认为这可能是一个问题(这很奇怪),我开始尝试取消它但不能。然后我将文件夹从tfs工作区移到另一个文件夹(在c:\ users \ my-user ..下),仍然无法删除只读属性(它似乎工作,但再次检查显示相同的属性文件)。我甚至疯狂地尝试在所有父文件夹上取消设置只读,然后放弃了它的静脉。并且不得以任何方式与原始问题相关。

我仔细检查了类似的问题和想法,但是选项用完了。

Win7,.net 4.5.2,VS2013是一些配置。

其他实验,更新 我尝试在sourcefile目录上使用Directory.CreateDirectory,其安全规则具有当前用户的完全权限,不会更改任何内容。为什么会抱怨源文件目录以?

开头

2 个答案:

答案 0 :(得分:0)

可能是文件被阻止了吗?如果它是从Internet下载的,Windows将阻止它。然后你需要转到文件的属性,在底部你会找到一个复选框,你可以在其中取消阻止它。

Blocked file

答案 1 :(得分:0)

嗯。它又发生了。在另一个地方犯错误。

我在问题中提出的简化代码并没有显示实际的代码。我使用环境变量作为源文件名,结果发现它指的是文件夹,而不是文件。

我认为这里的问题是微软的UnauthorizedAccess不够直观,无法理解您实际上是在尝试复制目录而不是文件,因此您开始追逐您的尾巴。无论如何,这是一个可以帮助别人的案例。不要忘记检查它是否是您正在复制的目录或文件。