• ベストアンサー

パスが作られるまで待っているプログラムは???

C#であるプロセスにより特定のパスが作られるのを確認するものを作成したいのですが・・・ おそらくループを使わなくてはいけないかと思うのですが、非常にループ処理が苦手でして・・・ どなたかご教示いただけませんでしょうか? 例えばとあるプログラムが「C:\hogehoge\hugahuga」というパスを処理中のどこかで作るとします。 このパスが出来るまで待ってそのなかに出来るファイルを読み込んで1行だけ書き換えたいのですが・・・ グルグルループさせるとしたらエラー対策もしなくてはいけないかと思うのですが、どのように作ればいいのでしょうか?

  • mr-r00
  • お礼率93% (480/516)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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と合わせて俺は考えている。

mr-r00
質問者

お礼

ありがとうございます。 そういうものがあるとはつゆ知らず考えておりました。 応用することによって目的のものが出来ました。

その他の回答 (1)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

System.IO.DirectoryもしくはDirectoryInfoクラスで特定パスの存在確認は可能です。 が、「中に出来るファイルを読み込んで書き換える」となるとそのファイルが書き込み可能になるまで待つ必要もありますね。

mr-r00
質問者

お礼

ありがとうございます。 助かりました。

関連するQ&A

  • vb プログラムの起動と例外処理

    はじめまして プログラムの実行と例外処理に関して質問させていただきます。 現在,visual basic2005でプログラム(A)からvbで作成した別のプログラム(B)に引数を指定してから起動し,別のプログラム(B)が例外処理に関する方法を調べています。 プログラム(B)起動時に例外処理を用い,以下のようなエラーメッセージを表示させるにはどういった処理を構成すればよいでしょうか。 パス名が設定されていない場合,”ファイルのパス名が見つかりませんでした” 引数が指定されていない場合,”引数が指定されておりません” 原因が特定できないエラーが発生した場合,”原因不明のエラーが発生しました” プログラムの実行にはShellメソッドとSystem.Diagnostics.ProcessクラスのStartメソッドがあるという事がわかりましたが,上記2つのメソッドが自分の意図したい操作に適しているかまでは理解におよんでおりません。 まだプログラミングを始めたばかりという事もあり,右も左もわかりませんが,ご教授お願い致します。

  • [C#]実行中プロセスのパスを調べる方法について

    いつもお世話になっております。 現在実行中のプロセスの中から、特定のアプリのexeファイルのpathを表示させる方法が分からず苦戦しております。 言語はC#になります。 以下のコードでテキストボックスに、C#でコンパイルしたプログラムのpathは分かったのですが、私が表示させたいのは、コンパイルしたプログラムのpathではなく、現在実行中のプロセスの中のあるアプリのexeファイルのpathになります。 string appPath= System.Windows.Forms.Application.ExecutablePath; textBox1.Text = appPath; 良いお知恵がございましたらお力添えいただきたく、宜しくお願いいたします。

  • プログラムが開かない

    この度、新しいパソコンに買い換えて古いパソコンから外付けのHDDにデーターを保存しました。 そして新しいパソコンでプログラムを開こうとすると下記の様なエラーメッセージが表示され 開くことが出来ません。 どのようにすれば開くことができますか? また、このプログラムに限らず他の保存したプログラムも同様のエラーメッセージが 表示され開くことが出来ません。 そもそも外付けHDDへの保存方法が間違っているのでしょうか? 合わせて解決方法を教えて頂けないでしょうか? よろしくお願いします。 エラーメッセージここから C:\Program Files\うきうき家計簿\UkiKakei.exe [Content] C:\Program Files\うきうき家計簿\UkiKakei.exe 指定されたパスは存在しません。 パスが正しいか確認してください。 エラーメッセージここまで

  • デーモンとしてサーバプログラム(ソケット使用)を稼動させるには?

    質問はタイトルの通りなのですが、いま私は、ソケットを用いてサーバプログラムを作成しております。私の作ろうと思っているプログラムは、forkを用いて、親プロセスにクライアントからの接続を待たせ、接続があったら、子プロセスに処理を行わせ、親プロセスは接続待ち(accept)に戻ります。あとは、この処理をひたすらループさせるだけです。  ですが、どのタイミングでforkやら無限ループを入れればよいのか分かりかねます。  ネットで色々調べていたら以下のサイトを発見し、それっぽいプログラムのサンプルが載っていたのですが、雰囲気的には、こんな感じでよろしいのでしょうか? http://kansai.anesth.or.jp/gijutu/perl/man-socket.php#tcp-msrv です。  どなたかご教授して頂けると幸いです。よろしくお願いします。

    • ベストアンサー
    • Perl
  • ポートをリスニングさせているプロセスからプログラムのフルパスを割り出す

    netstat と tasklistで確認したところ、 alg.exe が TCP 1025、 svchost.exe が TCP 2869 をリスニングさせているのですが、これらは一般的なことでしょうか? また、ポートをリスニングさせているプロセスからプログラムのフルパスを割り出すことは可能でしょうか? Windows XP Pro SP2を使用しています。どうぞよろしくお願いいたします。

  • VB6.0同一プログラム上で複数のExcelファイルの編集をしたいのですが…

    目にとめていただき有難うございます。 VBについては初心者です。宜しくお願い致します。 VB6.0で、フォーム上で指定した2つのExcelファイルについて、それぞれ特定の行・列を削除してCSVとして保存、そのデータを使って処理を行うプログラムを作成しようとしています。 同じVB6.0のプログラム上で、複数のExcelファイルに対して編集をかけることは可能でしょうか。 プログラムの流れとしては (1)エクセルオブジェクトの新しいインスタンスを作成 (2)エクセルファイル1を開き、特定行を削除する (3)エクセルファイル1をCSVとして保存、閉じる (4)オブジェクトを解放する (5)エクセルオブジェクトの新しいインスタンスを作成 (6)エクセルファイル2を開き、特定行を削除する (7)エクセルファイル2をCSVとして保存する (8)オブジェクトを解放する というものです。 (1)~(4)と(5)~(8)は同じSubプロシージャでファイルのパスだけ変えるようにしています。 (1)~(5)迄は素直に行くのですが、(6)の削除行を指定する段階で ‘Rows’メソッドは失敗しました’_Global’オブジェクト と出てしまう状態です。 (1)~(4)は問題なく動き、ファイル1の編集もきちんと出来ているため、混乱しております。 同じコードでパスだけ変えてやろうという考えが無理な話なのか、コードの組み方が悪いのか… 質問で不明瞭点があれば説明させて頂きますのでご指摘下さい。 宜しくお願い致します。 #ソースまで出した方が良かったのでしょうか…

  • プログラム内でのPath設定

    javaのプログラム内でパスを設定することはできますか? public class Test { public static void main(String[] args) { System.setProperty("java.library.path", System.getProperty("java.library.path") + ";C:/library/path"); System.loadLibrary("library"); } } 上のようにすると以下のエラーが出ます。 java.lang.UnsatisfiedLinkError: no library in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1517) at java.lang.Runtime.loadLibrary0(Runtime.java:788) at java.lang.System.loadLibrary(System.java:834) at Test.main(Test.java:6) Exception in thread "main" 環境変数「PATH」に C:/library/path を設定すると System.loadlibrary("library") で libraryを読み込むことができます。 なぜ上のやり方では読み込めないか教えてください。

    • ベストアンサー
    • Java
  • C言語でプロセスを処理するプログラムを考えています。

    C言語でプロセスを処理するプログラムを考えています。 popenを使ってプロセスを起動しようとしたですが、popenが未定義の関数とエラーが出てコンパイルできません。 ヘッダにstdio.hはおいてあります。 コンパイラはborlandを使用しています。 よろしくお願いします。

  • 別プログラムの起動の仕方に関して

    別プログラムの起動の仕方に関して 抽象的な質問で申し訳ありませんが、今現在、C#にて開発を行っていますが、 その際に、幾つものプログラムを作成しなければならない為、メニュー画面を 作成し、メニューのボタンが押されたら、それぞれのプログラムが起動するような 仕掛けを作成したいと考えています。 そこで、恐らく以下のようにパスを指定すれば、プログラムが起動するかと 思われますが、その際にログインのユーザやパスを引数として渡せないか?と 考えています。 《記述例》 using System.Diagnostics ; // アプリを起動 Process.Start("C:\\Program Files\\zzzzz\\xxxxx.exe") ; 上記のような内容で、渡す側と受け側のそれぞれどのように記述したら良いか? を教えて頂ければ幸いです。 よろしくお願いします。

  • バッチファイル内のパスについて

    バッチファイルのパスについて質問があります。 下記内容のファイルを実行すると、  「C:\Programが見つかりません」 というようなエラーとなってしまいます。 setコマンド時には、スペースの入ったパスはエラーとなってしまうのでしょうか? どなたがご教授ください。お願いします。 @echo off set JAVA_HOME=C:\Program Files\JavaSoft\JRE\1.3.1_12

専門家に質問してみよう