私は科学的な楽器を持っていますが、これは必要なものが残っています...しかし、それは専有的なものであり、働くだから私はそれをうまく演奏しようとしている。ソフトウェアで使用されているファイルを処理する際のI/Oエラー32の回避方法
ソフトウェアは、データを格納するためのテキストファイルを作成します。
は、ここに私のセットアップです。新しい観測(10秒ごと)ごとに、最新の観測結果をテキストファイルに追加します。私は共有ネットワークドライブにファイルを保存したいので、他のコンピュータのファイルに最新のアクセス権を与えることができます。しかし、ソフトウェアがファイルに書き込もうとしている間に、ラップトップがネットワークドライブへの接続を失った場合、ソフトウェアは破損し、その後のすべての観測はサイバースペースに失われます。私が取得I/Oエラー103
だからここに私は最初のハードドライブ上のデータをローカルに保存し、定期的にコピーを作成するように書いている小さなバッチファイルです:
set /p name= File name (without ".txt"):
set source= C:\Users\Admin\Desktop\%name%.txt
set destination= Z:\SKQ201701S\Birk_data\O2\%name%.txt
:loop
copy %source% %destination%
timeout /t 10
goto loop
はここに私の問題だが、 :
時々I/Oエラー32が発生することがあります。私が読んだことは、複数のプログラムが同じファイルに同時にアクセスしようとしているためです。だから、バッチスクリプトがファイルをコピーしている間に、ソフトウェアがファイルに新しい観測を追加しようとすることがあると仮定しています。それが起こると、エラーメッセージが表示されます。私は彼らがアクセスされたときにロックされているファイルについて読んだことがありますが、おそらくこのソフトウェアは書き込み中にファイルをロックしません?私は確信していません...
どうすればこのような事態を回避できますか?これまで私が見つけたすべての答えは、両方のプロセスがユーザーの制御下にあると仮定しています。通常、同じバッチスクリプト内にあります。しかし、私の場合、私は独自のソフトウェアを制御することはできません。
私はWindows 7です。ご意見はありますか?
これは、ソフトウェア**が書き込み中にファイルをロックするために発生し、バッチファイルが開かないためです。 2つの解決法がありますが、いずれも私の場合はどちらもうまくいきません。1)コピー操作中にソフトウェアを停止してから再起動するか、2)ソフトウェアベンダーに連絡して、ファイルへの書き込み方法を変更するよう依頼してください。 –
私は10秒ごとに行を追加すると、ファイルはかなり大きくなります。おそらく、クラウドの自動同期ソリューションは除外されます。受け入れ可能な代替案は、ファイルを['tail -n 300'](http://gnuwin32.sourceforge.net/packages/coreutils.htm)して過去5分間の最新の観測を得ることですか?これにより、10秒ごとに200ギガバイトのファイルをコピーすることなく、合理的に高速な要約データのコピーを作成できます。また、ネット共有へのコピーが失敗した場合、機器監視ソフトウェアに影響を与える可能性は低くなります。 – rojo
できますが、それは自明ではありません。キーは[opportunistic locking](https://blogs.msdn.microsoft.com/oldnewthing/20130415-00/?p=4663)です。便宜的なロックを保持したまま、ファイルの内容を読み取るプログラムを作成する必要があります。 (私は、コメントで言及された競争条件については確信していませんが、100年に1回というように、失敗率は十分に低いと思われます) –