问题标签 [ioexception]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 复制文件时如何防止此 System.IO.IOException?
当我运行以下代码来测试复制目录时,我在调用 fileInfo.CopyTo 方法时收到 System.IO.IOException。错误消息是:“该进程无法访问文件 'C:\CopyDirectoryTest1\temp.txt',因为它正被另一个进程使用。”
似乎 file1 ("C:\CopyDirectoryTest1\temp.txt") 上有一个锁,它是在发生错误的几行上方创建的,但如果是这样,我不知道如何释放它。有任何想法吗?
.net - Microsoft.NET 和 Doom 的多核 CPU
正确的问题
有没有人在单核机器上遇到过这个异常?
The I/O operation has been aborted because of either a thread exit or an application request.
一些上下文
在单个 CPU 系统上,一次只执行一条 MSIL 指令,尽管有线程。在操作之间,运行时可以进行内务处理。
引入第二个 CPU(或第二个内核),就可以在运行时进行内务处理时执行操作。因此,在单 CPU 机器上完美运行的代码在多核环境中执行时可能会崩溃,甚至导致蓝屏。
有趣的是,超线程 Pentium 并没有表现出这个问题。
我有在单核上完美运行并在多核 CPU 上剥落的示例代码。它在某个地方,但我仍在努力寻找它。它的要点是,当它被实现为访问者模式时,它会在不可预知的迭代次数后剥落,但是将方法移动到访问者操作的对象中会使问题消失。
对我来说,这表明该框架具有某种用于解析对象引用的内部哈希表,并且在多核系统上,存在与访问它有关的竞争条件。
我目前也有代码使用 APM 来处理串行通信。它曾经在我的 USB 串行适配器的虚拟 comport 驱动程序中间歇性地蓝屏,但我通过Thread.Sleep(0)
在每次Stream.EndRead(IAsyncResult)
以随机间隔,当我提供的 AsyncCallbackStream.BeginRead(...)
被调用并且处理程序尝试调用Stream.EndRead(IAsyncResult)
时,它会抛出一个IOException
声明The I/O operation has been aborted because of either a thread exit or an application request.
我怀疑这也与多核相关,并且某种内部错误正在杀死等待线程,从而导致这种行为。如果我对此是正确的,那么该框架在多核环境的上下文中存在严重缺陷。虽然有我提到的变通方法,但您不能总是应用它们,因为有时它们需要在其他框架代码中应用。
例如,如果您在网上搜索有关上述 IOException 的信息,您会发现它会影响那些显然甚至不知道他们正在使用多线程的人编写的代码,因为它发生在框架便利包装器的掩护下。
微软倾向于吹嘘这些错误报告是不可重现的。我怀疑这是因为问题只发生在多核系统上,并且像这样的错误报告没有提到 CPU 的数量。
所以...请帮我解决问题。如果我对此是正确的,我将不得不能够用可重复的测试用例来证明它,因为我认为错误的是需要在框架和运行时进行错误修复。
有人建议问题更可能是我的代码而不是框架。
调查问题的变体 A,我已将问题代码移植到示例应用程序中,并对其进行了精简,直到只剩下线程设置和在一个 CPU 上工作但在两个 CPU 上失败的方法调用。
变体 BI 还没有经过如此测试,因为我不再有任何单核系统。所以我重复这个问题:有没有人在单核平台上看到过这个异常?
不幸的是,没有人能证实我的怀疑,只能反驳它。
告诉我我容易犯错是没有帮助的,我已经意识到了这一点。
如果您知道将 .NET 应用程序固定到单个 CPU 的方法,那么解决这个问题会非常方便。---感谢VM的建议。我会这样做,很好的电话。
java - 仅在运行新的 Java 1.6 时出现 Java IOException - 请有人
升级到 XP 和 Java 1.6 后,我们的一个 Intranet 应用程序在浏览器中运行 java 小程序时遇到问题。java applet 是一个文档编辑器,它接受一个参数来指示文档所在的位置。我假设它将这个文件复制到用户机器上进行编辑。我希望我知道更多,但我没有来源……大坝!
我们在运行 XP-IE6-Java 1.6 的机器上得到了 java.io.IOException。这个问题不会在我们较旧的 Win2K-IE6-Java 1.3 上发生,所以我们确定它与桌面隔离,而不是服务器(无论如何,99% 肯定)。
一点信息:如果您尝试连续运行两次小程序,它会在第二次运行。第一次失败了。此外,在橙色 java 加载徽标嵌入浏览器之前出现错误消息框。
我还在策略文件中输入了以下信息,并通过控制台重新加载了策略文件。
这是堆栈跟踪的转储。谢谢你的时间 :-)
unit-testing - NUnit [TearDown] 失败——什么进程正在访问我的文件?
最终编辑:我找到了问题的解决方案(在问题的底部)。
我有一个让我很伤心的 Nunit 问题。编辑:实际上它看起来更像是一个 SQLite 问题,但我还不是 100% 确定。
我的 TestFixture 有一个设置,它生成一个随机文件名,在我的每个测试中用作 SQLite 数据库。
我的每个测试都在访问数据库的每个方法中使用此构造:
因此,Connect()
所有方法都使用一种辅助方法。我假设using() { }
构造Dispose()
在结束时调用连接TestMethod()
并释放与 SQLite 数据库文件的连接。
我遇到的问题在于我的 [TearDown] 方法:
每次测试我都会遇到一个异常:
所有的测试在到达 [TearDown] 时都失败了,所以我最终得到了一个充满临时数据库文件的目录(每个测试一个,每个都有不同的名称)和一大堆失败的测试。
什么进程正在访问该文件?我不明白第二个进程如何访问该文件。在connection
我尝试删除文件时,它已完全超出范围并已被 Dispose()d,因此它不能与 SQLite 相关。它可以?
请注意,如果我运行所有测试或仅运行一个测试,我会得到相同的结果。
更新:所以我也尝试了我的 DbCommand 对象的 Dispose()ing,因为我没有这样做(我假设 Dispose()ing DbConnection 的所有其他 ADO.NET 提供程序也 Dispose()s 该连接上的任何命令.) 所以现在它们看起来像:
它没有任何区别—— File.Delete() 行仍然抛出一个 IOException。:-(
如果我删除 [TearDown] 中的那一行,那么我的所有测试都会通过,但我会留下一大堆临时数据库文件。
另一个更新: 这很好用:
我不明白!
更新:找到解决方案:
我通过调试器运行单元测试,当[TearDown]
方法启动时,肯定不再有对 SQLite DbConnection 的引用。但是,强制 GC 必须清理它们。SQLite 中一定有一个错误。
c# - 同步 XmlWriter 对文件的访问以防止 IOExceptions 的最佳方法是什么?
应用程序中有多个位置在同一个文件上调用 XmlWriter.Create,所有位置都通过以下函数访问。当一个人打电话而另一个人还在写信时,我得到一个 IOException。锁定或同步访问的最佳方式是什么?
这是正在使用的功能:
更新:看起来问题不仅来自对该函数的调用,还因为另一个线程正在读取该文件,而该函数正在写入。什么是最好的锁定方式,这样我们就不会在读取文件时尝试写入文件?
.net - 你能解释一下为什么 DirectoryInfo.GetFiles 会产生这个 IOException 吗?
我有一个在 Novell 网络上运行的 WinForms 客户端-服务器应用程序,在连接到网络上的唯一 Windows 2003 Server 时会产生以下错误:
客户的网络管理员通过手动将工作站用户名和密码与服务器上的本地用户同步来管理 Windows Server 连接。该错误的奇怪之处在于,用户可以在错误之前和之后都写入服务器,而无需显式登录。
您能解释为什么会发生错误并提供解决方案吗?
java - close 是否会抛出 IOException?
在此处提供了一些答案并阅读了一些评论之后,似乎在实践中 IOException 永远不会在关闭文件 I/O 时抛出。
在任何情况下,在 Stream/Reader/Writer 上调用 close 实际上会引发 IOException?
如果真的抛出了异常,应该如何处理呢?
java - 强制 FileNotFoundException
我正在为一段代码编写一个测试,其中包含我试图覆盖的 IOException 捕获。try/catch 看起来像这样:
最简单的方法似乎是让 FileOutputStream 抛出 FileNotFoundException,但也许我做错了。
有没有人有任何提示?
java - 设备未连接异常
我尝试打开大量文件,但在 5000 个文件之后我得到了
这是预期的行为吗?有办法解决吗?我想让我的代码尽可能简单。
c# - 如何最好地等待文件锁释放
我有一个应用程序,有时我需要从正在写入的文件中读取并因此被锁定。正如我从其他问题中了解到的那样,我应该捕获 IOException 并重试,直到我可以阅读为止。
但我的问题是我如何确定该文件已被锁定并且它不是另一个 IOExcetpion 发生。