アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (2件)

_watchersの配列の中身を生成していないためです



ReDim ステートメントで2要素の配列にするか
Dim宣言時に添え字を1として2要素にしておいて

Initializeルーチンの Forループの冒頭で
_Watchers(i) = new System.IO.FileSystemWatcher( ary(i) )
などとしてインスタンス化しましょう
    • good
    • 0

--------------------------------------------------------


> _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)) {}
としてみてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!