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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q(Win7)アイコンの縮小版表示をフォルダ毎に設定

(1)あるフォルダーにJPEG写真が入っています。
このフォルダーでは、各ファイルのアイコンを縮小版で表示させたいです。
アイコン表示は、「大」です。

(2)デスクトップにpdfなどのファイルを置いています。
デスクトップのアイコンは、縮小版で表示せず、*.pdfはPDFのアイコンで表示させたいです。

上記(1)のフォルダーから、「ツール」→「フォルダーオプション」→「表示」→「常にアイコンを表示し、縮小版は表示しない」のチェックがありますが、これをチェックすると、(1)も(2)も縮小版表示されなくなります。
チェックをはずすと、(1)も(2)も縮小版で表示されてしまいます。

(1)は、縮小版で、(2)は普通のアイコンで表示させたいのですが、どうすればよいでしょうか?
WindowsXPまでは、各フォルダー毎に設定ができたような記憶があるのですが。


OSは、Windows7(32bit)です。
クラシックテーマにしています。

Aベストアンサー

フォルダごとに縮小表示を使う、使わないということでしょうか。
その場合、設定を変更後、下のほうの適用ボタン→OKボタンではどうでしょう?
私のWin7では、こうした設定が可能です。ただし、上の方のフォルダーに適用をクリックすると、同種のファイルが有るフォルダー全てに適用されてしまいます。

Qマクロで100マス計算! Dim i,j As Integer For i = 2 ToRang

マクロで100マス計算!

Dim i,j As Integer

For i = 2 ToRange(”A1”).End(xlDown).Row
For j=2 To Range(”B1”).End(xlToRight).Column

Cells(i,j).Value = Cells(i,1).Value * Cells(1,j).Value
Next j
Next i
Endsub

上記のように記述しましたが、
iの最終行が2となってしまっていますがなぜこのコードが間違っているのか分からないです。。どなたか教えていただけたら嬉しいです!

Aベストアンサー

確認してはいませんが…


>改行、スペースは実際にはきちんととっていますので気にしないでください
とのことなので、違っているのかもしれませんが、

>For i = 2 ToRange(”A1”).End(xlDown).Row
         ↓
 For i = 2 To Range(”A1”).End(xlDown).Row
で、うまくいきませんか?
100マス(10×10)と最初から決まっているので、範囲は 2 To 11 でも良いように思いますが…

改行、スペースなどが正しくなっているなら、Range(”A1”).End(xlDown).Rowの値が2以下になっている可能性が考えられます。(ということは、A1が空白セル、または、A3が空白セルなどなど・・)
A1が空白セルの場合は、
 For i = 2 To Range(”A2”).End(xlDown).Row
とするか、
 For i = 2 To 11
などとすることで、動作するのではないかと推測します。

QMac OS10.9のフォルダアイコンについて。

Mac OS10.9のフォルダアイコンについて。
現在OS10.3.9を使っています。以前OS9.0用のフリーウエアをダウンロードをして起動したところ、9.0用のシステムフォルダーのアイコンがそのフリーウエアのアイコンに書き換えられてしまいました。それ以来、フリーウエア本体とアイコンを削除したにもかかわらずそのアイコンが残っています。削除した時はいったん本来のシステムフォルダーのアイコンに戻るのですが、気が付くとまた書き換えられています。本来のフォルダアイコンに戻したいのでどなたか方法を教えて下さい。フリーウエアの作者の方にメールで訪ねてみたのですが返信が有りません。『がちゃぽん』とかいったタイトルだったように記憶しています。これは嫌がらせソフトウエアなのでしょうか。。。。。
困っています。アドバイスよろしくお願いします。

Aベストアンサー

念のため次のことを試してみてください

・OS9でのデスクトップ再構築(OS9でマシンを起動)
・その9.0のシステムフォルダがクラシック環境用のものなら、クラシック環境設定からデスクトップの再構築
・OSX上からプリバインディング
http://nmuta.fri.macserver.jp/terminal6.html

QVBSでDim、Private、Publicの違い

Dim、Private、Publicの違いを教えてください。

どのように使え分けるのですか?

Aベストアンサー

VBSで、どの程度、使いこなせられるかにもよりますね。
一般のVB系の言語と違って、それらのステートメントは出会うことは少ないです。

Dim が入っているので、変数に対してのことだと思います。以下のように3つ並べてみて、その違いが分かるはずです。Dim と Public は、基本的には同じになります。ところが、Private は、呼び出せません。ただし、Function や Sub につけるキーワードは意味が変わります。

On Error Resume Next
Class myClass
Public FirstName
Private LastName
Dim Genr
Property Get FullName
Fullname = FirstName & " " & LastName & " " & Genr
End Property
Sub AddName(fname, lname, gnr)
Firstname = fname
LastName = lname
Genr = gnr
End Sub
End Class
Set Class1 = new myClass
Class1.Addname "Mari", "Yaguchi" ,"Talent"
MsgBox(class1.FirstName)
MsgBox(class1.LastName)
MsgBox(class1.Genr)
MsgBox(Err.Description)
'技術評論社 ポケットリファレンス『VBScript』p.42を参考

VBSで、どの程度、使いこなせられるかにもよりますね。
一般のVB系の言語と違って、それらのステートメントは出会うことは少ないです。

Dim が入っているので、変数に対してのことだと思います。以下のように3つ並べてみて、その違いが分かるはずです。Dim と Public は、基本的には同じになります。ところが、Private は、呼び出せません。ただし、Function や Sub につけるキーワードは意味が変わります。

On Error Resume Next
Class myClass
Public FirstName
Private LastName
Dim Genr
Property Get FullN...続きを読む

Qフォルダタスクを消したい + 規定のアイコンの画像を抽出したい

フォルダーのアイコンを変更したところ、フォルダを開くとフォルダの右側に『ファイルとフォルダのタスク』『その他』『詳細』などが出るようになってしましました。
以前も同じ失敗をしてその時は何とか消したのですが、今回は幾ら探しても消し方が分りません。
消す方法を教えていただきたいです。

もう一つは、フォルダのアイコンを自分で弄りたいと思っています。
既存のアイコンをちょっと弄るだけのつもりなのですが、既存のアイコンのデーターをどのようにして取り出したらよいのかが分りません。
『C:\WINDOWS\system32\shell32.dll』辺りにあるのは分るのですが、それ以上が分らないです。

どなたか回答してくださるととても助かります。

Aベストアンサー

タスクは
フォルダ上部のツール→フォルダオプション→全般タブの作業→従来のWindowsフォルダを使う にすれば大丈夫だと思います。
もう一つの方法としては

マイコンピュータ右クリックのプロパティ→詳細設定タブのパフォーマンスの設定→視野効果タブでカスタムに→フォルダでよく使用するタスクを使用する。のチェックを外す
で、大丈夫だと思います。
全く別物だったらすいません。左側のタスクなんで(´Д`

アイコンを取り出すとき、私は彩彩畑というフリーソフトを使っていました。Windowsのシステムアイコンも使えたと思います。他にも色々あると思いますが…一応URL貼っときますね

参考URL:http://www.hm.h555.net/~irom/ssb_1/ssb_1.htm,http://www.hm.h555.net/~irom/ssb_help/ssb_help_3.htm

Q調べてもわからないのでこの文の意味を教えてください。 Dim a as system.Reflect

調べてもわからないのでこの文の意味を教えてください。

Dim a as system.Reflection.Assembly=system.Reflection.Assembly.GetExcutingAssembly()

Dim b as string = system.IO.Path.GetDirrectoryName(a.Location)


VB.NETを使用しています。

Aベストアンサー

Dim a as system.Reflection.Assembly=system.Reflection.Assembly.GetExcutingAssembly()
自分自身 (実行プログラム) を参照

Dim b as string = system.IO.Path.GetDirrectoryName(a.Location)
実行プログラムがあるフォルダーのパスを取得

QLAN上フォルダのワイヤー付きアイコンをなんと呼ぶのですか?

wXPのマシンに「コンテナxpーAMD」と言うファイル
w2Kのマシンに「コンテナ2kーT100」を作っています。
Explorerで確認すると
C:\Documents and Settings\Administrator\NetHood\
以下の 相手マシンのフォルダーアイコンにはワイヤーの様な物が付いています。これを何ホルダーと呼ぶのですか?
  マシン名にAMDやT100使用。CPUやマザーボード名。

Aベストアンサー

「ネットワークドライブ」や、「ネットワークフォルダ」でいいかと思います。

QLabel2.visible=false

任意の関数式を入れるとグラフを描くプログラムを作りました。表示するのに時間がかかる(といっても1秒程度ですが)ので「計算中!」と赤で表示させ、グラフが描き終わると消したいと思い、グラフ開始時にLabel2.Visible=True、終了時にLabel2.Visible=Falseを付けましたが、思惑通りには行きません。何故でしょう。おわかりになる方、教えてください。

Aベストアンサー

.NET以降,DoEvents (System.Windows.Forms.Application.DoEventsメソッド) の使用は推奨されません。
DoEventsはVB6までやVBAのような,マルチスレッドが扱えない言語における代替策でしかなく,
長時間かかる処理 (だいたい50ms:WinRT APIにおける非同期処理の目安) を超えるようであれば,その処理はバックグラウンドスレッドで処理すべきです。

VB 2005以降であれば,BackgroundWorkerコンポーネントをFormに配置し,
・Label2.Visible = False後,配置したBackgroundWorkerのRunWorkerAsyncメソッドを呼び出す
・グラフの点の計算をBackgroundWorkerのDoWorkイベントに記述する。
※このイベントの中で,Formのコントロールやコンポーネントに触ることができないので注意して下さい。
・BackgroundWorkerのRunWorkerCompletedイベントで,グラフの描画やLabel2.Visible = Trueを行う。
という方法で処理を行います。
# VB 2012以降で.NET 4.5以降をターゲットとする場合では,Async/Awaitを使う方法が推奨されます。

ref) MSDN: 方法 : バックグラウンドで操作を実行する
http://msdn.microsoft.com/ja-jp/library/hybbz6ke.aspx

.NET以降,DoEvents (System.Windows.Forms.Application.DoEventsメソッド) の使用は推奨されません。
DoEventsはVB6までやVBAのような,マルチスレッドが扱えない言語における代替策でしかなく,
長時間かかる処理 (だいたい50ms:WinRT APIにおける非同期処理の目安) を超えるようであれば,その処理はバックグラウンドスレッドで処理すべきです。

VB 2005以降であれば,BackgroundWorkerコンポーネントをFormに配置し,
・Label2.Visible = False後,配置したBackgroundWorkerのRunWorkerAsyncメソッドを呼び...続きを読む

Qアイコンを変更したフォルダをサーバーへコピーするとアイコンが戻る…

フォルダのアイコンを、フォルダ>プロパティ>アイコンの変更で、カスタムアイコン(ビットマップ画像に拡張子.icoつけたもの)に変更して、それをサーバーにコピーしたり他の端末にコピーしたら単なる普通のフォルダのアイコンに戻ってしまいます。

どうすれば変更したアイコンのまま他の端末にコピーできるのでしょうか…。誰かご存知の方、教えてください。よろしくお願いします。

OS:Windows XP

Aベストアンサー

カスタマイズ情報はアイコンを変更したフォルダ内のdesktop.iniに保存されています。

検証していませんが、次の手順でアイコンを変更すればうまくいくかもしれません。
よければ試してみてください。

(1)適当なフォルダで「ツール」→「フォルダオプション」の「表示」タブで
「すべてのファイルとフォルダを表示する」にチェックを入れます。
「保護されているオペレーションシステムファイルを表示しない」のチェックを外しま

(desktop.iniを表示するため)

(2)アイコンを変更したいフォルダにカスタムアイコン(例:hoge.ico)をコピーし、「プロパティ」で「隠しファイル」にチェックを入れます(フォルダオプションの設定を元に戻したときカスタムアイコンを非表示に)。

(3)「プロパティ」の「アイコンの変更」で(2)でコピーしたカスタムアイコン(hoge.ico)を指定します。これでフォルダ内にdesktop.iniが作成されます。

(4)desktop.iniをダブルクリックして開きます。
IconFile=・・・\hoge.ico

IconFile=hoge.ico
とファイル名だけに変更し上書き保存します。

(5)フォルダオプションの設定を元に戻します。

カスタマイズ情報はアイコンを変更したフォルダ内のdesktop.iniに保存されています。

検証していませんが、次の手順でアイコンを変更すればうまくいくかもしれません。
よければ試してみてください。

(1)適当なフォルダで「ツール」→「フォルダオプション」の「表示」タブで
「すべてのファイルとフォルダを表示する」にチェックを入れます。
「保護されているオペレーションシステムファイルを表示しない」のチェックを外しま

(desktop.iniを表示するため)

(2)アイコンを変更したいフォルダにカ...続きを読む

QMicroSoft BasicのDim文とVisualBasicのDim文の違い

私が20年前にMicroSoft Basicを使っていたときは、DIM文はDIMENSIONの略で配列型変数の宣言に使っていました。

最近VisualBasicの勉強を始めたのですが、変数の宣言はすべてDim文になっており、昔のMS BasicのDim文と意味合いが変わっているのに驚いています。

ここで質問させてください。
・なぜ配列を意味するDimension文が変数の宣言なのか?
・どのバージョンのBasicからDim文の意味が変わったのか?

私が使用していたのはNEC N-Basic,N-88Basic,N-98Basicです。

Aベストアンサー

VISUAL BASIC のDimは ディメンジョンの略です。
私の経験ではVB2.0時代からありました。

配列0を考えた場合変数とおなじであるからだとおもいます


人気Q&Aランキング

おすすめ情報