問題タブ [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 が発生します。エラー メッセージは次のとおりです。
エラーが発生している場所の数行上に作成された 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 システムでは、スレッドに関係なく、一度に 1 つの MSIL 命令のみが実行されます。操作の合間に、ランタイムはハウスキーピングを行います。
2 つ目の CPU (または 2 つ目のコア) を導入すると、ランタイムがハウスキーピングを行っている間に操作を実行できるようになります。その結果、単一の CPU マシンで完全に機能するコードが、マルチコア環境で実行されるとクラッシュしたり、ブルースクリーンが発生したりする可能性があります。
興味深いことに、HyperThreaded 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 に関してネットを検索すると、複数のスレッドを使用していることさえ明らかに知らない人々によって書かれたコードに影響を与えていることがわかります。
Microsoft は、これらのバグ レポートを再現不可能として吹き飛ばす傾向があります。これは、問題がマルチコア システムでのみ発生し、このようなバグ レポートでは CPU の数が言及されていないためだと思われます。
だから... 問題を特定するのを手伝ってください。私がこれについて正しければ、反復可能なテストケースでそれを証明できなければなりません。なぜなら、私が間違っていると思うことは、フレームワークとランタイムの両方でバグ修正を伴うからです。
問題は、フレームワークよりも私のコードにある可能性が高いことが示唆されています。
問題のバリアント A を調査して、問題のコードをサンプル アプリに移植し、1 つの CPU で動作して 2 つの CPU で失敗するスレッド セットアップとメソッド呼び出しだけが残るまで、それを切り詰めました。
シングル コア システムがなくなったため、バリアント BI はそれほどテストされていません。繰り返しますが、シングル コア プラットフォームでこの例外を見た人はいますか?
残念ながら、誰も私の疑いを確認することはできず、反論するだけです.
私が間違いやすいと言うのは役に立ちません。私はすでにこれに気づいています。
.NET アプリケーションを単一の CPU に固定する方法を知っていれば、これを理解するのに非常に便利です。---VM の提案をありがとう。私はまさにそれをします、良い電話です。
java - 新しいJava 1.6を実行している場合のみJava IOException - 誰かお願いします
XP および Java 1.6 にアップグレードした後、ブラウザで Java アプレットを実行すると、イントラネット アプリケーションの 1 つに問題が発生します。Java アプレットはドキュメント エディタであり、ドキュメントが配置されている場所へのパラメータを受け入れます。このファイルをユーザーのマシンにコピーして編集すると仮定します。もっと知りたいのですが、ソースがありません...ダム!
XP-IE6-Java 1.6 を実行しているマシンで java.io.IOException が発生しています。この問題は、古い Win2K-IE6-Java 1.3 では発生しないため、サーバーではなくデスクトップに分離されていることは確かです (とにかく 99% 確実です)。
ちょっとした情報: アプレットを 2 回続けて実行しようとすると、2 回目は機能します。初めて失敗します。また、オレンジ色の Java ローディング ロゴがブラウザに埋め込まれて表示される前に、エラー メッセージ ボックスが表示されます。
また、次の情報をポリシー ファイルに入力し、コンソールからポリシー ファイルをリロードしました。
これはスタック トレースのダンプです。御時間ありがとうございます :-)
unit-testing - NUnit [TearDown]が失敗します-どのプロセスが私のファイルにアクセスしていますか?
最終編集:問題の解決策を見つけました(質問の下部にあります)。
私は悲しみを引き起こしているNunitの問題を抱えています。編集:実際にはSQLiteの問題のように見えますが、まだ100%確実ではありません。
私のTestFixtureには、各テストでSQLiteデータベースとして使用されるランダムなファイル名を生成する設定があります。
私の各テストでは、データベースにアクセスする各メソッドでこの構成を使用しています。
そのため、1つのヘルパーメソッドConnect()
がすべてのメソッドで使用されます。using() { }
コンストラクトがDispose()
最後に接続を呼び出しTestMethod()
、SQLiteデータベースファイルへの接続を解放していると想定しています。
私が抱えている問題は、[TearDown]メソッドにあります。
すべてのテストで例外が発生します。
[TearDown]に到達すると、すべてのテストが失敗するため、一時的なデータベースファイル(テストごとに1つ、それぞれ異なる名前)でいっぱいのディレクトリと、失敗したテストがたくさんあります。
どのプロセスがファイルにアクセスしていますか?2番目のプロセスがファイルにアクセスする方法がわかりません。はconnection
完全にスコープ外になり、ファイルを削除しようとしている時点でDispose()されているため、SQLiteに関連するものにすることはできません。それをできる?
すべてのテストを実行した場合、または1つのテストだけを実行した場合でも、同じ結果が得られることに注意してください。
更新:それで、DbCommandオブジェクトのDispose()も試していませんでした(DbConnectionをDispose()する他のすべてのADO.NETプロバイダーもその接続上のコマンドをDispose()すると仮定しました) 。)これで、次のようになります。
違いはありませんでした。File.Delete()行は引き続きIOExceptionをスローします。:-(
[TearDown]でその1行を削除すると、すべてのテストに合格しますが、大量の一時データベースファイルが残ります。
別の更新: これは問題なく機能します:
理解できない!
更新:解決策が見つかりました:
デバッガーを介して単体テストを実行しましたが、[TearDown]
メソッドが開始されると、SQLiteDbConnectionへの参照はなくなりました。ただし、GCを強制するとそれらをクリーンアップする必要があります。SQLiteにバグがあるはずです。
c# - IOExceptions を防ぐためにファイルへの XmlWriter アクセスを同期する最善の方法は何ですか?
アプリケーションには、同じファイルに対して XmlWriter.Create を呼び出す複数の場所があり、すべて次の関数を介してアクセスされます。書き込み中に別の呼び出しを行うと、IOException が発生します。アクセスをロックまたは同期する最良の方法は何ですか?
使用されている関数は次のとおりです。
更新: 問題はこの関数の呼び出しだけではないようですが、この関数の書き込み中に別のスレッドがファイルを読み取っているためです。読み取り中にファイルに書き込もうとしないようにロックする最善の方法は何ですか?
.net - DirectoryInfo.GetFilesがこのIOExceptionを生成する理由を説明できますか?
WinFormsクライアントサーバーアプリをNovellネットワークで実行しているため、ネットワーク上の唯一のWindows2003サーバーに接続すると次のエラーが発生します。
顧客のネットワーク管理者は、ワークステーションのユーザー名とパスワードをサーバー上のローカルユーザーと手動で同期することにより、WindowsServer接続を管理します。エラーの奇妙な点は、ユーザーがエラーの前後の両方で、明示的にログオンしなくてもサーバーに書き込むことができることです。
エラーが発生する理由を説明し、解決策を提供できますか?
java - close で IOException がスローされることはありますか?
ここでいくつかの回答を提供し、いくつかのコメントを読んだ後、実際には、ファイル I/O のクローズ時に IOException がスローされることはないようです。
Stream/Reader/Writer で close を呼び出すと実際に IOException がスローされるケースはありますか?
実際に例外がスローされた場合、どのように処理する必要がありますか?
java - デバイスが接続されていないという例外
多数のファイルを開こうとしましたが、5000 個のファイルの後、
これは予想される動作ですか?それを回避する方法はありますか?コードをできるだけ単純なままにしておきたい。
c# - ファイルロックが解放されるのを待つ最善の方法
書き込み中のファイルから読み取る必要があり、その結果ロックされているアプリケーションがあります。他の質問から理解したように、IOException をキャッチして、読めるまで再試行する必要があります。
しかし、私の質問は、ファイルがロックされていること、および発生した別の IOExcetpion ではないことをどのように確実に知ることができるかということです。