CSVファイルが使用中か確認する方法

解決


bhang  2008-08-29 06:23:19  No: 145147

WindowsXP、VB.NET2003で開発しています。
「2つのCSVファイルをMDBに取り込み、MDBで集計したデータをエクセルで出力する」
というプログラムを作成しました。

ここで、取り込むCSVが使用中の場合、
(テキストエディタで開いている、エクセルで開いている・・など)、
プログラム実行時のエラーは、下記のメッセージとなります。

※「MDBへデータ取込中にエラーが発生しました
    ファイルを開くことが出来ませんでした。ほかのユーザーが排他的に開いているか、データを読み取る権限がありません。」

どのプログラムで起動しているかはユーザによって変わるため、
該当のCSVファイルが使用中であれば、
『○○は使用中です。使用中でないことを確認してから再度実行してください』
といったメッセージを表示したいと考えています。

検索したところ下記のサイトが出てきましたが、
内容が理解出来ていないこともあり、この方法を使用していいのかどうか分かりません。
http://soudan1.biglobe.ne.jp/qa3180014.html

また、自分なりに考えたのは、「※」のエラーをトラップしたら、
自分で考えたエラーメッセージを表示し、Exit Sub で処理を終了させる・・というものですが、
この「※」のエラーを特定してトラップする方法が分かりません。
(どのようにして検索すれば知りたい情報が出るか分かっていません)

どのようにすればよいでしょうか・・。


  2008-08-29 17:57:10  No: 145148

VB.NET系なら
Try〜Catch構文を調べてみよう
VBのヘルプとか、ネットで「Try」あたりで引っ掛ければ情報は得られると思う
(もちろんネットの場合は「VB.NET」も付加して)
まずは適当な検索文字で検索して、徐々に絞り込んでいけばいい
Catchも検索文字列に入れてみる、とかね

ちなみに「VB.NET エラートラップ」でググっても、参考になる情報は
ゴロゴロ出てくる
中には「On Error Goto」に関する説明も出てくるけど、
.NETではOn Errorは出来るだけ使わないようにしよう

ちなみにオススメはココかな
内容は多いけど詳しい
http://dobon.net/vb/dotnet/beginner/exceptionhandling.html


ところで  2008-08-29 19:56:11  No: 145149

>2つのCSVファイル
>MDB
>エクセル

質問文からだけでも少なくとも4つのファイルがあることが想像できます。

ファイル操作をするのであればどのファイルに対しても同様の対処をする必要があるのではないでしょうか?

#同様の、ではなく一般的なエラーすべてを考えたほうがいいですけどね。


bhang  2008-09-01 21:39:38  No: 145150

返事が遅くなりました。

try〜catch〜end try でのエラートラップについて勉強してみました。
下記のようにして、ファイルが開けなければエラーメッセージを表示することとしました。
また、それ以外の例外も取得できるようにしました。

        Dim fs As System.IO.FileStream
        Dim strFPath As String = "ファイルパス"
        Try
            fs = New System.IO.FileStream(strLastMon, IO.FileMode.Open, IO.FileShare.ReadWrite)
            fs.Close()

        Catch ex As System.IO.IOException
            MsgBox(System.IO.Path.GetFileName(strFPath) & "は既に別のプロセスで起動しています。" & vbNewLine & "別のプロセスを終了させてから再実行してください。")
            Exit Sub

        Catch ex As Exception
            MsgBox("ファイルの入出力でエラーが発生しました。" & vbNewLine & ex.Message)
            Exit Sub

        Finally
            If Not (fs Is Nothing) Then
                fs.Close()
            End If

        End Try

エラー処理に関して、奥が深いのですね・・。
ヒントありがとうございました。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加