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

監視プログラムについて

環境/言語:[Win 2000 Pro VB.NET]
分類:[.NET]

いつもお世話になります。

今回監視プログラムの方を作成しているのですが
どうもおかしな部分があります。わかる方がおら
れましたら宜しくお願いします。

内容:あるプログラムからあるフォルダー内にテキスト
   ファイルが作成されるのですが、作成されたら
   自動に(監視部分)その内容を読み取ってある形式
   で変換をかけてその内容を新規ファイルに出力する
   といったプログラムを作成しています。
   (作成された最初のファイルは最後に削除します。)

問題点:フォルダーにテキストファイルを作成したところ
    問題なく新規ファイルが作成されるのですが、何度も
    連続で同じことを繰り返したところ下記のようなエラー
    がでてしまいます。
  
  system.IO.IOException のハンドルされていない例外がmscorlib.dll
で発生しました。
  追加情報:プロセスファイルは"D:\〜"にアクセス出来ません。他のプロセス
  が使用中です。

 とでます。 決まった時にこのエラーが出るのではなく何度かやっていると
 たまに発生します。

 下記にソースを載せます。
Public Sub Search_file()
Dim watcher As New System.IO.FileSystemWatcher()
'watcher.SynchronizingObject = Me
'監視するディレクトリを指定
watcher.Path = "D:\a"
'*.txtファイルを監視、すべて監視するときは""にする
watcher.Filter = "*.txt"
'ファイル名とディレクトリ名の変更を監視
watcher.NotifyFilter = IO.NotifyFilters.FileName Or _
IO.NotifyFilters.DirectoryName
'サブディレクトリは監視しない
watcher.IncludeSubdirectories = False
'必要に応じてバッファサイズを変更
'watcher.InternalBufferSize = 4096
'同期的に監視する
Dim changedResult As System.IO.WaitForChangedResult = _
watcher.WaitForChanged(IO.WatcherChangeTypes.All)
'結果を表示
'MessageBox.Show(changedResult.ChangeType.ToString & _
' ":(file)=" & changedResult.Name & ":(old file)=" & _
' changedResult.OldName)

'テキストファイルの存在の有無
If System.IO.File.Exists(System.Configuration.ConfigurationSettings.AppSettings("file")) Then
Dim sr As New System.IO.StreamReader(System.Configuration.ConfigurationSettings.AppSettings("file"), System.Text.Encoding.GetEncoding(932))
'内容をすべて読み込む
Dim s As String = sr.ReadToEnd()
'閉じる
sr.Close()
Dim sw As New System.IO.StreamWriter(System.Configuration.ConfigurationSettings.AppSettings("file1"), False, System.Text.Encoding.GetEncoding(932))
'変換後の内容をすべて書き込む
sw.Write(PWD_CONV(s))
'閉じる
sw.Close()
System.IO.File.Delete(System.Configuration.ConfigurationSettings.AppSettings("file"))
End If

'再起コール
Search_file()
End Sub

  '計算部分
Private Function PWD_CONV(ByVal Pass As String) As String
Return CtolCrypt.DecryptStringForOEC(Pass)
End Function

わかる方がおられましたら宜しくお願いします。
> 問題点:フォルダーにテキストファイルを作成したところ
>     問題なく新規ファイルが作成されるのですが、何度も
>     連続で同じことを繰り返したところ下記のようなエラー
>     がでてしまいます。

監視対象のファイルを作成したプロセスが、まだそのファイルへの書き込みとクローズを完了していないのでしょう。

ファイルシステムから「ファイルの作成完了」の通知を受ける方法は無いので、ファイルを作成するプログラム?との間に何らかの手続きを設けて「ファイル作成の完了」を通知してもらうか、例外が発生したら成功するまで再試行するなどしか方法はありません。
お返事ありがとうございます。

プロセスが終了してなかったエラーということが
わかったので、例外処理の方で対応してみようと
思います。 解答の方本当にありがとうございました。
解決済み!

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