System.IO.Copy 操作间歇性地在 .Net 4.0 C# 控制台应用程序中给出拒绝访问错误

Posted

技术标签:

【中文标题】System.IO.Copy 操作间歇性地在 .Net 4.0 C# 控制台应用程序中给出拒绝访问错误【英文标题】:System.IO.Copy operation intermittently giving Access Denied Error in .Net 4.0 C# Console Application 【发布时间】:2020-05-02 07:17:21 【问题描述】:

我有一个用 .Net framework 4.0 C# 编写的控制台应用程序。在应用程序中,我将文件从服务器的一个位置复制到另一个位置。

代码如下:

System.IO.File.Copy("sourceFile","destFile",true);

我创建了一个 Windows 调度程序,它每天在特定时间执行控制台应用程序。

如果我手动运行该代码,它就可以正常工作。但是,它在通过调度程序运行时间歇性地给出以下访问被拒绝错误(例如每 10 次一次)。

错误消息:对路径“destFile”的访问被拒绝。其他信息(如有) 堆栈跟踪:在 Syste.IO._Error.WinIOError(Int32 errorCode, String maybeFullPath) 在 Syste.IO.File.InternalCopy(String sourceFileName, String destFileName,Boolean overwrite, Boolean checkHost) 在 System.IO.File.Copy(String sourceFileName ,String destFileName,布尔覆盖)

我尝试在其他较低环境服务器(开发/测试)中重现该错误,但无法重现该问题。已经多次删除任务计划程序并创建了新的计划程序,但没有运气。一旦我重新运行代码,问题就会得到解决,因为它本质上是完全间歇性的。已授予对源位置和目标位置的权限,因此它可以正常工作 9/10 次。

如果您发现任何问题或需要更多信息以进行进一步的故障排除,请告知。

【问题讨论】:

目标文件是否可能被其他进程使用,因此无法覆盖? 试试this方式。 【参考方案1】:

查看应用程序用户权限,可能是您用来运行应用程序的用户,错过了写入所需路径的权限。

【讨论】:

权限看起来正确,因为它可以正常运行 9/10 次而没有出现此错误。【参考方案2】:

注意到您打开了覆盖选项。如果 dest 文件之一(被覆盖)被其他应用程序打开,您将收到一些错误消息。

【讨论】:

在控制台应用程序访问它之前,没有其他应用程序可以打开 dest 文件。但是,Windows 调度程序是否有可能并行运行同一控制台应用程序的重复实例? 它多久运行一次?如果它在前一个作业结束之前运行,前一个作业可以保存一些 dest 文件 每天运行一次,持续约 25 分钟。

以上是关于System.IO.Copy 操作间歇性地在 .Net 4.0 C# 控制台应用程序中给出拒绝访问错误的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 Web 应用程序中的间歇性超时问题?

调试桌面堆耗尽

Postgres INSERT 为 json 返回“无效的输入语法”

如何在 GitHub 主仓库中获取新文件

由于拖动事件中的 DOM 操作,HTML5 可拖动的放置事件不会间歇性触发

协议违规错误和OALL8处于不一致状态