痔になりやすい生活習慣とは?

見ていただいてありがとうございます。
どうかお知恵を拝借させてください。
'-----------------------
開発環境 WinXp pro
C#2005
'-----------------------

C#にて、[とあるフォルダ内のファイル監視処理]を実装しています。
FileSystemWatcherのCreatedで、このフォルダ内でのファイル作成
を監視する様に実装したのですが、問題が発生しました。

ftpを複数起動し、このフォルダに対し、ほぼ同時に複数件の
ファイルをダウンロードしたところ、一部ファイルのCreatedが
発生しませんでした。

同様の現象が発生した方、その解決法を御教示ください。
また、FileSystemWatcher以外での良い実装方法があれば
御教示ください。
困り果てています。

宜しくお願いいたします。

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

A 回答 (1件)

FileSystemWatcherクラスのリファレンスには、イベントの見落としを予防する方法として


「InternalBufferSize プロパティを使用してバッファ サイズを大きくする」とか
「ロング ファイル名を使ってウォッチすることは避ける」
といったガイドラインが示されていますが、そのあたりはもう試されたということでしょうか?
    • good
    • 0
この回答へのお礼

見落としていました・・・。
ありがとうございます。

今回は別の方法で回避することになりましたが、
教えていただいたことは今後に生かそうと思います。

お礼日時:2007/11/08 08:42

このQ&Aに関連する人気のQ&A

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

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

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

Qフルパスから最後のディレクトリ名を取得したい。

vb.netなのですが、例えば
c:\aaa\bbb\ccc\ddd\eee\fff.exe
というフルパスがあったとして、
eeeというディレクトリ名を取得したいのですが、
何か良い方法はないでしょうか。
それぞれのディレクトリ名の文字数や階層数は
決まっていないのですが、オススメの方法が
ありましたら、教えて頂けると助かります。

Aベストアンサー

MessageBox.Show(IO.Path.GetFileName(IO.Path.GetDirectoryName(myPath)))

IO.Path の GetDirectoryName でフォルダのフルパスを取得して、さらに IO.Path の GetFileName で最終フォルダ(またはファイル)の名前を取得。

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

Qデータソース名および指定された既定のドライバが見つかりません。

データソース名および指定された既定のドライバが見つかりません。
オラクルに接続したのですが、上記のエラーが出て接続出来ません。
どなたか力を貸してください。

<環境>
WinXP
VS2005 Ver8.0.50727.42
Windowsアプリケーション
VB言語でオラクルに接続したいと思っています。

こちら(http://support.microsoft.com/kb/310985/ja)を参考に
オラクルに接続しようとしています。

Dim cn As OdbcConnection
cn = New OdbcConnection("Driver = {Microsoft ODBC for Oracle};" & _
"Data Source=ORA_TEST;uid=UID_TEST;pwd=PWD_TEST")

Try
cn.Open()
MsgBox("Connected")
Catch ex As Exception
MsgBox("NG")
Debug.Print(ex.Message, "Error") ←(A)
Finally
cn.Close()
End Try

(A)で「ERROR [IM002] [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバが見つかりません。」

のメッセージが出ます。
VB2005の「ツール」-「サーバの接続」では接続確認が取れているのですが、
コードで書くとエラーになってします。

何か書き忘れているのでしょうか。。。
すみませんがよろしくお願いいたします。

データソース名および指定された既定のドライバが見つかりません。
オラクルに接続したのですが、上記のエラーが出て接続出来ません。
どなたか力を貸してください。

<環境>
WinXP
VS2005 Ver8.0.50727.42
Windowsアプリケーション
VB言語でオラクルに接続したいと思っています。

こちら(http://support.microsoft.com/kb/310985/ja)を参考に
オラクルに接続しようとしています。

Dim cn As OdbcConnection
cn = New OdbcConnection("Driver = {Microsoft ODBC for Oracle};" & _
...続きを読む

Aベストアンサー

>cn = New OdbcConnection("Driver = {Microsoft ODBC for Oracle};" & _
>"Data Source=ORA_TEST;uid=UID_TEST;pwd=PWD_TEST")

自分の環境に合わせないとね?????

これの意味はインポートしているんですよね? スクリプトはVBSの事ですかね。VBA? VBですよね?

Imports System.Data
Imports Microsoft.Data.ODBC


それと見るHPがちょこと違う。
http://msdn.microsoft.com/ja-jp/library/system.data.oracleclient.oraclelob.aspx

QC#で設定時刻到来時にイベントを発生させたい

 C#のことで教えてください。

 C#には、Timerコンポーネントがあって、
一定時間ごとにTickイベントが発生します。

 これと似たような感じで
ある時刻になるとイベントが発生する
Alarmコンポーネント(?)のような
ものはないでしょうか?

Aベストアンサー

>ある時刻になるとイベントが発生する
>Alarmコンポーネント(?)のような
>ものはないでしょうか?

そういうものはありませんね。こちら↓などが参考になるかもしれません。

  http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=43692&forum=36

Qオブジェクト参照がオブジェクト インスタンスに設定されていません  というエラーについて

タイトルの「オブジェクト参照がオブジェクト インスタンスに設定されていません」についてですが、

このエラーは、

null を参照しようとして例外が発生している

エラーだと解釈しているのですが、nullでないのに、このエラーが出る場合はどのように対処すればいいのか教えてください。

下記のような文があるとします。

Dim aaa as String
'aaaは、データベースからデータをとってきています。

If aaa IsNot DBNull.Value Then
DropDownList.SelectedItem.Text = aaa.TrimEnd 'ここでエラー
End If

aaaは、NullではないのでIf文の中に入っていくのですが、DropDownListにデータを入れようとすると、タイトルのようなエラーが発生します。

デバッグでaaaの値を見ても、ちゃんとデータが入っているし、Nullではないのですが、なぜこのようなエラーが出るのかわかりません。

このエラーは他に違う意味があるのでしょうか?

また、他に影響している部分があるのでしょうか?

どなたか教えてください。

よろしくお願いいたします。

タイトルの「オブジェクト参照がオブジェクト インスタンスに設定されていません」についてですが、

このエラーは、

null を参照しようとして例外が発生している

エラーだと解釈しているのですが、nullでないのに、このエラーが出る場合はどのように対処すればいいのか教えてください。

下記のような文があるとします。

Dim aaa as String
'aaaは、データベースからデータをとってきています。

If aaa IsNot DBNull.Value Then
DropDownList.SelectedItem.Text = aaa.TrimEnd 'ここでエ...続きを読む

Aベストアンサー

SelectedIndexは何番目の行かということを示すので、数値でなければ
なりません。Items(i).Text=aaaになるiを見つけて設定します。
FindByTextかFindByValueで検索したListItemを使って、IndexOfで
インデックスを求める方法がスマートでしょうか。

http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listitemcollection.findbytext(VS.80).aspx
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listitemcollection.findbyvalue(VS.80).aspx
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listitemcollection.indexof(VS.80).aspx

>表示するデータと値のデータを別々に設定
Text(表示するデータ)とValue(値のデータ)を仕込んだListItemを
Add(場合によってはInsert)メソッドで追加(挿入)します

http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listitem(VS.80).aspx
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listitemcollection.add(VS.80).aspx
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listitemcollection.insert(VS.80).aspx

SelectedIndexは何番目の行かということを示すので、数値でなければ
なりません。Items(i).Text=aaaになるiを見つけて設定します。
FindByTextかFindByValueで検索したListItemを使って、IndexOfで
インデックスを求める方法がスマートでしょうか。

http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listitemcollection.findbytext(VS.80).aspx
http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.listitemcollection.findbyvalue(VS.80).aspx
http://msdn.microsoft...続きを読む

QC#でPictureBox内での図形移動について

例えばPictureBoxに縦棒グラフを10本描画し、それが時間の経過と共に全体的に1本づつ左に移動して右端には最新の情報が表示されている様なものが作りたい。

それで右の9本をコピーして左端に移動(上書き)し、右端に新しい棒グラフを描画すれば良いと思っているのですが、図形を移動する方法があれば教えて下さい。

コピーする領域とコピー先の基準点を設定して呼び出すだけのメソッドを期待して探したのですが見当たりませんでした。

TranslateTransform()がそれっぽい感じもするのですがよく分かりません。

宜しくお願いします。

Aベストアンサー

描画はどのように行っているのでしょう

ピクチャーボックスなどへ直接となると難しいと思います

Bitmapオブジェクトを2個と描画用のGraphicsオブジェクト用意します
Bitmap bmSrc, bmDraw;
Graphics grBack;

初期化イベントなどで
bmSrc = new Bitmap( 幅, 高さ );
grBack = Graphics.FromIamge( bmSrc );
// グラフの描画処理を追加
// bmSrcをgrBackから分離
grBack.Dispose();
bmDraw = (Bitmap)bmSrc.Clone();
pictureBox1.Image = bmDraw;

更新イベントで
grBack = Graphics.FromImage( bmSrc );
// スクロール幅が16ドットの場合
grBack.DrawImage( bmDraw, new Point( -16, 0 ) );
// ココに右端の描画処理を追加
// bmSrcをgrBackから分離
grBack.Dispose();
bmDraw = (Bitmap)bmSrc.Clone();
pictureBox1.Image = bmDraw;

といった具合で

描画はどのように行っているのでしょう

ピクチャーボックスなどへ直接となると難しいと思います

Bitmapオブジェクトを2個と描画用のGraphicsオブジェクト用意します
Bitmap bmSrc, bmDraw;
Graphics grBack;

初期化イベントなどで
bmSrc = new Bitmap( 幅, 高さ );
grBack = Graphics.FromIamge( bmSrc );
// グラフの描画処理を追加
// bmSrcをgrBackから分離
grBack.Dispose();
bmDraw = (Bitmap)bmSrc.Clone();
pictureBox1.Image = bmDraw;

更新イベントで
grBack = Graphics.FromImage( bmSrc );
// スク...続きを読む

QVisual C#でストップウォッチ機能を使うには

Windowsフォームアプリでストップウォッチの機能を使いたいのですが

( 1 ) 表示の機能として、デジタル数字が0.1秒単位で進んでいく様子をLabel等に表示させるには?

( 2 ) 内部の機能として、Button等でスタート、ストップ、リセットを行うには?


( 2 )については、StopwatchクラスのStopとStartメソッドを用いるというのまでは突き止めましたがここまでは正しいでしょうか。Buttonクリックイベントハンドラとインスタンス化とメソッド使用方法自体は最低限わかります。

Visual C# 2012を使っています。
ほぼ初心者レベルなので最低限の用語しか理解できないですが、宜しくお願いします。

Aベストアンサー

>「タイマーなりスレッドなり」というのはどういう事でしょう?

まず、実験として
ボタンを1個配置して、そこに
Label1.Text = sw.ElapsedMilliseconds.toString() + " ミリ秒";
を記述して実行

追加したボタンを押すたびに
値が変わる事を確認

逆に言えば、ボタンを押さなきゃ変わらない事を確認したって事なので、
定期的に実行されるイベントに
Label.Text = sw.ElapsedMilliseconds.toString() + " ミリ秒";
を記述すれば良い

で、定期的に実行されるイベントを持つのが
「タイマーなりスレッドなり」と言う事

>タイマーというとTimerコントローラの事ですか?
Timer コントロールの事


>また
>LabelのTextに時間を代入する文はどの位置で何のイベントハンドラーで記入すればいいでしょうか?
がまさに ↓ これ
Label1.Text = sw.ElapsedMilliseconds.toString() + " ミリ秒";

Label1.Text
↑ラベル1のテキストプロパティ に

= sw.ElapsedMilliseconds
↑ストップウォッチの、経過時間(ミリ秒)を


.toString() + " ミリ秒";
↑文字列に変換して、後ろに" ミリ秒"とつけてセットする


この後ろにリフレッシュ関数を付けるほうが良いかも
Label1.Text = sw.ElapsedMilliseconds.toString() + " ミリ秒";
Label1.Refresh();//← Label1 再描画指示

>「タイマーなりスレッドなり」というのはどういう事でしょう?

まず、実験として
ボタンを1個配置して、そこに
Label1.Text = sw.ElapsedMilliseconds.toString() + " ミリ秒";
を記述して実行

追加したボタンを押すたびに
値が変わる事を確認

逆に言えば、ボタンを押さなきゃ変わらない事を確認したって事なので、
定期的に実行されるイベントに
Label.Text = sw.ElapsedMilliseconds.toString() + " ミリ秒";
を記述すれば良い

で、定期的に実行されるイベントを持つのが
「タイマーなりスレッドなり」と...続きを読む

Qリストビューをスクロールさせるには

フォームが表示されたあとリストビューを一番下までスクロールさせたいのですがどうすればいいのでしょうか?

Aベストアンサー

'最後の行を表示する
ListView1.ListItems(ListView1.ListItems.Count).EnsureVisible
'最後の行を選択する
ListView1.ListItems(ListView1.ListItems.Count).Selected = True

QIISでローカル内からhttp://localhostと入れても表示されない

windows2000 server で「既定のWebサイト」上でサービスを開始させました。
ちゃんと表示されるかと思いインターネットエキスプローラを開き
http://localhost と入力して表示されるか試したのですが、下記のようなメッ
セージが表示され閲覧する事ができません。
何か打開策はありますでしょうか?





エラー
リクエストされた URL は取得できませんでした

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

以下の URL を取得した際に: http://localhost/

次のエラーが発生しました:

以下のホスト名の IP address を調べられません. localhost
DNS サーバが以下のエラーを返しました:

Name Error: The domain name does not exist.
この意味は次の通りです:

キャッシュは URL 中のホスト名から IP address を調べることができませんでした.
アドレスが間違っていないか確認してください.

windows2000 server で「既定のWebサイト」上でサービスを開始させました。
ちゃんと表示されるかと思いインターネットエキスプローラを開き
http://localhost と入力して表示されるか試したのですが、下記のようなメッ
セージが表示され閲覧する事ができません。
何か打開策はありますでしょうか?





エラー
リクエストされた URL は取得できませんでした

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

以下の URL を取得した際に: http://localhost/ ...続きを読む

Aベストアンサー

>しかしなぜlocalhostでは表示されないのでしょうか?

DNSの仕組みに関係します。
localhostと言う名前から127.0.0.1というIPアドレスを求めるのがDNSの役割です。
その際、WindowsNT/2000/XPのDNSサーバはhostsファイルを参照します。(hostsにない名前は、さらに上位のDNSサーバに問い合わせます。)
localhostという名前は特殊なので、hostsがその情報を持っていなくてはならないのです。

今回のケースではhostsが存在しないようなので、hostsをメモ帳で作成する手順をご紹介しておきます。 (説明の都合上、Cドライブのルートディレクトリで作業します。)
(1)次のファイルが存在するか確認してください。
C:\WINNT\system32\drivers\etc\hosts.sam
 ・存在する→Cドライブのルートディレクトリにhosts.txtと言う名前でコピーし、メモ帳で開く。
   copy C:\WINNT\system32\drivers\etc\hosts.sam c:\hosts.txt
   notepad c:\hosts.txt
 ・存在しない→メモ帳でc:\hosts.txtを新規作成する。
   notepad c:\hosts.txt

(2)次の1行をhosts.txtの最後に追加します。127.0.0.1とlocalhostの間には半角スペースを7つ以上入れ、行のおしりには改行を入れます。
127.0.0.1 localhost
     ↑     ↑
     |    改行
 半角スペースx7

(3)hosts.txtを上書き保存します。

(4)hosts.txtをシステムディレクトリに移動します。この際に拡張子txtを取り除きます。
move c:\hosts.txt C:\WINNT\system32\drivers\etc\hosts

(5)Windowsを再起動します。

以上がその手順です。
これでlocalhostが127.0.0.1として認識されるはずですが、システムディレクトリをいじりますので慎重に作業してください。
作業手順が理解できない場合、作業に不安を感じる場合はやらないほうが無難です。

>しかしなぜlocalhostでは表示されないのでしょうか?

DNSの仕組みに関係します。
localhostと言う名前から127.0.0.1というIPアドレスを求めるのがDNSの役割です。
その際、WindowsNT/2000/XPのDNSサーバはhostsファイルを参照します。(hostsにない名前は、さらに上位のDNSサーバに問い合わせます。)
localhostという名前は特殊なので、hostsがその情報を持っていなくてはならないのです。

今回のケースではhostsが存在しないようなので、hostsをメモ帳で作成する手順をご紹介しておきます。 (説明の...続きを読む

Q16進数を10進数に変換する方法...

お初にお目にかかります(^^)
簡潔に質問しますm(_ _)m

バージョン:MS-Visual Basic6.0
質問内容:
16進数を10進数に変換する方法がわかりません。
Hex(Text1.Text) や Oct(Text1.Text) のような方法で
16進数・8進数に変換できるんですが…
10進数に変換する方法がわかりません。

P.S できれば、16進数→10進数、16進数や10進数→2進数
…に、変換する方法も、よろしければ教えてくださいませ
m(_ _)m

Aベストアンサー

16進数→10進数は

Dim StrHex As String
Dim intVal As Integer
StrHex = "1A"
intVal = Val("&H" & StrHex)

で出来ます。


申し訳ありませんが2進数への変換はよく分かりません。


人気Q&Aランキング