Visual Studio - VB.net File in Use 异常0x80070020

Visual Studio - VB.net File in Use Exception 0x80070020

提问人:buerm009 提问时间:12/20/2022 最后编辑:buerm009 更新时间:12/22/2022 访问量:102

问:

我已经在这个问题上工作了一个多月,并尝试了我在论坛上找到的所有东西。迫切需要帮助。

背景:

1 - 我最近开始使用一台全新的 PC (Windows 10)

2 - 我运行的 VS2019 版本与以前的 PC 完全相同

3 - 此程序是包含许多复选框和文本框的窗体。用户进行选择并在表单上输入信息,然后保存它。保存后,我使用 streamwriter 将每个控件的状态写入文本文件(又名 .enc 扩展名)。然后,当用户再次打开窗体时,它会使用 streamreader 打开同一文本文件,并设置窗体上每个控件的状态,以便用户可以看到以前输入的内容。

4 - 文本文件位于共享网络上,但是当从网络管理中检查文件时,包括我在内的任何用户都不会显示为“正在使用”。

该程序已经运行了几年,IT 基础架构没有变化。问题只存在于我的电脑上。

问题:

• 当我打开一个现有项目并对其进行任何更改并通过调试或发布运行程序并运行 exe 时,一切正常

• 一旦我对源代码进行任何更改(包括添加注释字符这样简单的事情),它就会抛出一个异常,我在这篇文章的最后有一个异常。

• 抛出的异常很棘手,因为它绝对与流的处理无关(从源代码的角度来看)。请参阅下面的 A 项

• 当我尝试通过 Windows 资源管理器修改或删除文本文件时,它会给我一条“文件正在使用”消息。当我使用另一台 PC 尝试删除此文件时,它可以在不说“文件正在使用”的情况下工作。

• 据我怀疑,编译器的一个非常深层次的方面正在发生一些事情。

• 需要明确的是,这就是问题所在:运行程序(创建一个文本文件),那里没有问题。然后我等待,再次运行程序,然后在尝试加载相同的文本文件时崩溃。当我通过 Windows 资源管理器查看文本文件时,它处于“使用中”。

我尝试过什么:

A) 我已经尝试了处理 streamwriter 和 streamreader 的两种方法......流。Close() 方法以及使用流 Using ...End Using 方法。请参阅下面的代码片段。

B) 我使用同事的 PC 通过调试和已发布的 exe 运行完全相同的源项目,它不会导致任何问题。

C) 我尝试使用 processMonitor 和 processExplorer 搜索文本文件,以查找导致延迟的相关进程或.dll。它永远不会显示在进程转储中。

D) 禁用防病毒软件

**E) 在另一台 PC 上运行。这行得通。

F) 在另一台 PC 上编译 exe,然后从我的 PC 运行 **出现相同的错误

G) VS的维修和重新安装

H) 安全模式

我已经阅读了数百个论坛帖子,并尝试了几乎所有的建议。如果你有任何想法并可以帮助我,我将不胜感激,如果你能够弄清楚这一点,你将是一个绝对的传奇。

法典:

方法 1

Dim filewriter As System.IO.StreamWriter

filewriter = My.Computer.FileSystem.OpenTextFileWriter(dirNewENC & newfile, True)
filewriter.WriteLine("shortcutCreated=" & shortcutCreated)
filewriter.WriteLine("shortcutPath=" & shortcutPath)
...
filewriter.Close()

方法 2

Using filewriter = My.Computer.FileSystem.OpenTextFileWriter(dirNewENC & newfile, True)
filewriter.WriteLine("shortcutCreated=" & shortcutCreated)
filewriter.WriteLine("shortcutPath=" & shortcutPath)
...
End Using

异常详细信息:

System.IO.IOException HResult=0x80070020 消息 = 进程无法访问文件“\affs01\Shared\Sales\Quotes\ENC\TEST8%01%TEST%Q99999998%44456%.enc”,因为它正被另一个进程使用。 源=mscorlib 堆栈跟踪: 在 System.IO.__Error.WinIOError (Int32 errorCode, String maybeFullPath) 在 System.IO.FileStream.Init (字符串路径、 FileMode 模式、 FileAccess 访问、 Int32 权限、 布尔 useRights、 FileShare 共享、 Int32 bufferSize、 FileOptions 选项、 SECURITY_ATTRIBUTES secAttrs、 字符串 msgPath、 布尔值 bFromProxy、 布尔值 useLongPath、 布尔值 checkHost) 在 System.IO.FileStream..ctor(字符串路径、 FileMode 模式、 FileAccess 访问、 FileShare 共享、 Int32 bufferSize、 FileOptions 选项、 字符串 msgPath、 布尔值 bFromProxy、 布尔值 useLongPath、 布尔值 checkHost) 在 System.IO.StreamReader..ctor(字符串路径,编码编码,布尔值 detectEncodingFromByteOrderMarks,Int32 bufferSize,布尔值 checkHost) 在 System.IO.StreamReader..ctor(字符串路径,编码编码,布尔值 detectEncodingFromByteOrderMarks) 在 Microsoft.VisualBasic.FileIO.FileSystem.OpenTextFileReader (字符串文件,编码编码) 在 Microsoft.VisualBasic.MyServices.FileSystemProxy.OpenTextFileReader (字符串文件) 在 C:\Users\RB\OneDrive\Code\repos\Order Entry\Order Entry\GlobalSubs.vb:line 6348 中的 Order_Entry.GlobalSubs.checkOrderType() 在 Order_Entry.frm_NewEntry.btn_searchQuote_Click (对象发送方,EventArgs e) 在 C:\Users\RB\OneDrive\Code\repos\Order Entry\frm_NewEntry.vb:line 152 中 在 System.Windows.Forms.Control.OnClick (EventArgs e) 在 System.Windows.Forms.Button.OnClick (EventArgs e) 在 System.Windows.Forms.Button.PerformClick() 在 System.Windows.Forms.Form.ProcessDialogKey (键 keyData) 在 System.Windows.Forms.Control.ProcessDialogKey (键 keyData) 在 System.Windows.Forms.TextBoxBase.ProcessDialogKey (键 keyData) 在 System.Windows.Forms.Control.PreProcessMessage (消息&消息) 在 System.Windows.Forms.Control.PreProcessControlMessageInternal (控制目标, Message& msg) 在 System.Windows.Forms.Application.ThreadContext.PreTranslateMessage (MSG& msg) 在 System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FPreTranslateMessage (MSG& msg) 在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop (IntPtr dwComponentID, Int32 原因, Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner (Int32 原因,ApplicationContext 上下文) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop (Int32 原因,ApplicationContext 上下文) 在 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() 在 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() 在 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine) 在 Order_Entry.My.MyApplication.Main(String[] Args) 中:第 83 行

vb.net 例外

评论

2赞 Andrew Morton 12/21/2022
修复它的最快方法可能是重新安装 Windows。选择您喜欢的选项:重置 vs 刷新 vs 全新安装 vs 就地升级 vs 云重置 vs Windows 中的全新启动
0赞 Hursey 12/21/2022
对我来说,尝试的解决方案 F) 排除了编译器中的任何内容,当然,如果您在机器上编译,请复制到工作 PC,它会确认它。这将使我想到三个可能的原因。1)您的Windows环境,重新安装/重置可能会修复。2)需要重新设置此文本文件所在文件夹的权限。3)多年来,Windows更新确实搞砸了共享等基本功能,而现在简单的东西却不是。总而言之,这听起来非常环保,可能超出了这个论坛的范围

答:

0赞 buerm009 12/22/2022 #1

除了提到的@Andrew Morton 和 @Hursey 之外,我还咬紧牙关,重新安装了 PC。

可以愉快地(在某种意义上)报告问题已解决。

谢谢。

...现在要取回我所有的应用程序。

评论

0赞 Community 12/26/2022
您的答案可以通过其他支持信息进行改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。