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# 控制台应用程序中给出拒绝访问错误的主要内容,如果未能解决你的问题,请参考以下文章
Postgres INSERT 为 json 返回“无效的输入语法”