- ベストアンサー
パスが作られるまで待っているプログラムは???
C#であるプロセスにより特定のパスが作られるのを確認するものを作成したいのですが・・・ おそらくループを使わなくてはいけないかと思うのですが、非常にループ処理が苦手でして・・・ どなたかご教示いただけませんでしょうか? 例えばとあるプログラムが「C:\hogehoge\hugahuga」というパスを処理中のどこかで作るとします。 このパスが出来るまで待ってそのなかに出来るファイルを読み込んで1行だけ書き換えたいのですが・・・ グルグルループさせるとしたらエラー対策もしなくてはいけないかと思うのですが、どのように作ればいいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
// System.IO.FileSystemWatcherクラスというのがある。 // http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx using System; namespace Q7071771 { public class Q7071771:System.Windows.Forms.Form { private System.IO.FileSystemWatcher fsw; public Q7071771(){ fsw = new System.IO.FileSystemWatcher("D:\\"); fsw.Created += FileSystemWatcher_Created; fsw.Renamed += FileSystemWatcher_Renamed; fsw.EnableRaisingEvents = true; } private void FileSystemWatcher_Created(object source,System.IO.FileSystemEventArgs e){ this.Text += "Created:" + e.FullPath; } private void FileSystemWatcher_Renamed(object source, System.IO.RenamedEventArgs e){ this.Text += "Renamed:" + e.FullPath; } public static void Main(){ Q7071771 form = new Q7071771(); form.ShowDialog(); } } } // フォームが表示されているときにDドライブ直下にファイルを作成してみると // フォームのタイトルが変わる。 //以下割とどうでもいい話。 // 用途によっては // WaitForChanged(WatcherChangeTypes, Int32) // の方が解りやすいかも。 // 起動後、エクスプローラを立ち上げてファイルを作成してみる。その時、ファイル名を指定するわけだが、 // MSの実装だと、 //「新しいテキスト ドキュメント.txt」が「作成」され、 // 指定した「abc.txt」へ「変更」とみなされる。当然abc.txtというファイル名はFileSystemWatcher_Createdメソッドでは取得できない。 // Monoの実装では、リネームも「作成」とみなされるように思う。バグかな? // バグだとしてもMonoが悪いと思うなら、Monoで動くコードにアプリケーション側で対処せず、Mono側を直させる方向に持っていくべし。 // 余力があるなら、ソースを読んで修正してみよう!(他のところかもしれないけど) // https://github.com/mono/mono/blob/master/mcs/class/System/System.IO/FileSystemWatcher.cs // Webサイト作成等でIE用にコードを用意するように言われたりして、企業等からMSに批判がいかなくなっちゃうような展開は嫌。 // Webサイト側のバグならIEはそれらを助けないようにしないと…って方向に世の中が向かってないような気がして落ち込む。 // エンドユーザの責任範囲とかアプリケーションの責任範囲とかサイトの責任範囲とかしっかり分けたい。 // アンサガは説明書が説明不足だから当時投げ売りされた。優秀なプログラマでも未知の言語ならHello,Worldのようなチュートリアルがないとコードは書けない。 // 直感的にアプリケーションを使えるようにするのも大事。 // でも、それは甘やかせということじゃない。 // ブラウザに文字サイズ調整機能がついているのを知らず、Webサイト側に実装させる/したがるのとか // ブログで、テキストを選択したときにわざわざ自作の検索パーツを出現させるな! // それは作成者のエゴか単なるエンドユーザの怠慢だ。 // わざわざ見づらく小さく書いてあるわけじゃないんだ。説明書を読んでくれない?読まないエンドユーザが悪い、とQ7071786と合わせて俺は考えている。
その他の回答 (1)
- D-Matsu
- ベストアンサー率45% (1080/2394)
System.IO.DirectoryもしくはDirectoryInfoクラスで特定パスの存在確認は可能です。 が、「中に出来るファイルを読み込んで書き換える」となるとそのファイルが書き込み可能になるまで待つ必要もありますね。
お礼
ありがとうございます。 助かりました。
お礼
ありがとうございます。 そういうものがあるとはつゆ知らず考えておりました。 応用することによって目的のものが出来ました。