• 締切済み

複数ディレクトリの監視(VB.NET framework1.1)

FileSystemWatcherを使用してファイル監視を行おうと考えています。 対象ディレクトリは2つを監視できるようにしようと試みているのですが、 new を行ったあとでも_WatchersがNothingとなり、その後の処理がエラーになります。 newをしたのち_WatchにFileSystemWatcherの構造が付与されるようにしたいのですが、どこがおかしいのでしょうか? 教えてください。 また、追加で必要な項目がありましたら補足します。 【エラー内容】 'System.NullReferenceException' のハンドルされていない例外が xxx.exe で発生しました。 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。 【使用環境】 Windows 2000 ,VisualStudio2002(VB) .netFrameWork1.1 使用 --------------------コード------------------------------ Private _Watchers() As System.IO.FileSystemWatcher Private Sub Initialize() Dim _ary(1) As String _ary(0) = "C:\1" _ary(1) = "C:\2" _Watchers = New System.IO.FileSystemWatcher(_ary.GetLength(0)) {} Dim i As Integer For i = _ary.GetLowerBound(0) To _ary.GetUpperBound(0) - 1 _Watchers(i).EnableRaisingEvents = False _Watchers(i).Path = _ary(i) 'プロパティ設定 'サブディレクトリは監視しない _Watchers(i).IncludeSubdirectories = False 'ファイルの変更を監視する watcher.NotifyFilter = System.IO.NotifyFilters.FileName 'XLSのファイルを監視 _Watchers(i).Filter = "*.xls" 'イベントハンドラの登録 AddHandler _Watchers(i).Created, AddressOf OnChange '監視の開始 _Watchers(i).EnableRaisingEvents = True Next i End Sub 'Initialize

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

_watchersの配列の中身を生成していないためです ReDim ステートメントで2要素の配列にするか Dim宣言時に添え字を1として2要素にしておいて Initializeルーチンの Forループの冒頭で _Watchers(i) = new System.IO.FileSystemWatcher( ary(i) ) などとしてインスタンス化しましょう

  • nishito24
  • ベストアンサー率90% (10/11)
回答No.1

-------------------------------------------------------- > _Watchers = New System.IO.FileSystemWatcher... FileSystemWatcherの配列ができるだけで、_Watchers(0),_Watchers(1),がnullになっています。 _Watchers(0) = new ... _Watchers(1) = new ... とインスタンスをセットしないと、_Watchers(i)は使えません。 -------------------------------------------------------- FileSystemWatcherの配列が2個作られることを期待していると思いますが、実際には3個作られてしまいます。 _Watchers = New System.IO.FileSystemWatcher(UBound(_ary)) {} としてみてください。

関連するQ&A