DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ディスクフル時のエラー処理

環境/言語:[Visual Studio 2003 VisualBasic.NET]
分類:[.NET]

はじめまして。お世話になります。

早速本題ですが
OS : WinXP
Visual Studio 2003 VisualBasic .NET
でのプログラミング時にちょっと困ったことが起きてご相談です。
デバッガ上で以下のようなコードを走らせてみるとわかりますが
書き込みが原因でディスクフルの状態になった後、
ファイルのクローズができないためその後のファイルの処理ができ
なくなるために対応策を検討しています。

ファイルを扱う上でディスクフルは無視することができない
例外処理のため、こんな現象には困ったことがある方も
多いかと思います。

対処法として皆さんどんな方法を取られているのかヒントだけでも
教えていただけると助かります。

=========
(※注意)
以下テストプログラム動作させる際にはFDなどディスクフルが
おきても重大な問題が起こらないドライブでテストしてください。
=========

Sub diskfull_test()
Const FN as integer = 1
try '一度目のオープン
FileOpen(FN , "a:\testfilename", OpenMode.Output)

Catch ex As Exception
MsgBox("FileOpen Error" & Err.Description)
End Try

try 'ディスクフルが出る書き込みを行う。
Dim i as integer
For i=1 to 10000 'ここの値は適当に変更してください。
PrintLine(FN , "test")
Next
Catch ex As Exception
MsgBox("PrintLine Error" & Err.Description)
End Try

Try 'ディスクフルが出てクローズできない
FileClose(FN)
Catch ex As Exception
MsgBox("FileClose Error" & Err.Description)
End Try

try 'ファイルがクローズできていないためオープンできない
FileOpen(FN , "a:\testfilename", OpenMode.Output)
Catch ex As Exception
MsgBox("FileOpen Error" & Err.Description)
End Try

Try 'ファイルがオープンできていないためクローズできない
FileClose(FN)
Catch ex As Exception
MsgBox("FileClose Error" & Err.Description)
End Try
End Sub
つい最近そのような話題がありましたので、とりあえずは、 No13815 のスレッドをご覧ください。
http://naka.wankuma.com/site/column/dotnet/00028.htm

ここに解説を書いてあります。
QFEの入手と、そのページに書いてあるようなtryを組み合わせれば対応できます。
■No14528に返信(管理人さんの記事)
> つい最近そのような話題がありましたので、とりあえずは、 No13815 のスレッドをご覧ください。

過去ログも検索してみてたつもりだったのですが探し方が足りませんでした。
有用な情報ありがとうございます。
■No14530に返信(中博俊さんの記事)
> http://naka.wankuma.com/site/column/dotnet/00028.htm
>
> ここに解説を書いてあります。
> QFEの入手と、そのページに書いてあるようなtryを組み合わせれば対応できます。

解決方法を教えていただいてありがとうございます。

しかしこの問題は、クリティカルなトラブルにしか見えないのですが対処方法が正直一般化されているようには見えません。
すでに「.NET Framework 2.0」がリリースされている以上この問題に対応するためにはこちらへの乗り換えも有効な対処法なのかもしれませんね。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板