- 題名: 監視フォルダにWordが入ったときにそのWordを起動したい
- 日時: 2014/10/24 10:05:31
- ID: 32669
- この記事の返信元: - (なし)
 
- この記事への返信: - [32670] Re[1]: 監視フォルダにWordが入ったときにそのWordを起動したい2014/10/24 12:01:06
 
- ツリーを表示
■No32669に返信(k-kさんの記事)
まずはじめに何が分からないのかがよく分からないのですが、
> 要件についての処理、もしくは、参考サイトを教えていただけないでしょうか?
ということなので
要件1、2、3がすべて分からないということではないですよね?
(全体的に読むと要件2だけが分からないようにも受け取れますが、
 最終的には要件の部分がすべて分からないと言っているように受け取れるので。)
> 1.label1にファイル名が入るようにしたい。
ただ書かれた内容をそのまま対処すると以下のようになります。
private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
{
    label1.Text = e.FullPath;
}
しかし、ListBoxへ出力できているのですが、そういう意味ではなく
> 1.label1に[パスがない状態の]ファイル名[だけの文字列]が入るようにしたい。
という意味であれば以下のようにすればよいかと思います。
private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
{
    label1.Text = e.Name;
}
> 2.その後Wordを起動したい。
>   (編集中の待機の処理の仕方は必要?)
これも、ただ書かれた内容をそのまま対処すると以下のようになります。
private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
{
    System.Diagnostics.Process.Start("C:\〜インストールされたパス〜\WINWORD.EXE");
}
しかし、これも前後の意味として考えると不明なので、そういう意味ではなく
> 2.その後[作成を検知した]Word[ファイル]を起動したい。
という意味であれば以下のようにすればよいかと思います。
private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
{
    System.Diagnostics.Process.Start(e.FullPath);
}
参考
http://dobon.net/vb/dotnet/process/shell.html
#一般的にWordで作成されたファイルのことは「Word」とは言わず、
#「Wordドキュメント」、「Wordファイル」、「Docファイル」などといいます。
#逆に「Word」というとMicrosoftが提供している実行体(EXE)の事等を指します。
> 3.保存されたことを知れるようにしたい。
ListBoxへ出力できているのですから、ある意味知れるようにはなっていますよね?
そういう意味ではなく他の意味かと考えましたが、ここについてはよくわかりませんでした。
(新規作成されたという事は保存された訳ですから。
 新規作成された後に保存という意味???)
もう少し的確な説明をして頂けたらと思います。(全般的に)
■No32675に返信(k-kさんの記事)
だいたいやりたい事が理解できました。
> 更新の考え方ですが、
> 起動時にタイムスタンプを保持しておき
> 終了時にタイムスタンプを保持、
> それを比較し、差異がある場合は「更新」するべきである。
> と認識したいと考えております。
「終了時」というのをどう受け取るかにもよりますが、
自分が提示した
System.Diagnostics.Process.Start(e.FullPath);
のやり方を使用するのであれば、
Startメソッドの戻り値よりプロセスが取得できると思いますので、
そのプロセスが終了するまで待機することになると思います。
private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
{
    MessageBox.Show("ここで現在のファイルの更新日時を取得処理を記述");
    label1.Text = e.Name;
    System.Diagnostics.Process p =  System.Diagnostics.Process.Start(e.FullPath);
    p.WaitForExit();
    MessageBox.Show("ここに更新されてるかチェック処理と更新されている場合の処理を記述");
}
参考:http://dobon.net/vb/dotnet/process/openfile.html
蛇足ですが、
この場合、この処理が終わるまで自身のプログラムが応答なし状態になると思います。
ちなみにこの状態は次のファイルが来ても処理してくれません。
応答なし状態を回避したければ、以下も参照してみてください。
参考:http://dobon.net/vb/dotnet/programing/progressdialogbw.html
分類:[.NET]
いつも拝見させていただいてます。
表題のとおり、
監視していたフォルダにWordを確認したときにそのWordを
起動する処理をしたいと考えています。
監視処理は
FileSystemWatcherを利用して監視しています。
@ private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e)
{
listBox1.Items.Insert(0, DateTime.Now.ToString() + " ファイル 「" + e.FullPath + "」が変更されました。");
}
A private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
{
listBox1.Items.Insert(0, DateTime.Now.ToString() + " ファイル 「" + e.FullPath + "」が作成されました。");
}
B private void fileSystemWatcher1_Deleted(object sender, System.IO.FileSystemEventArgs e)
{
listBox1.Items.Insert(0, DateTime.Now.ToString() + " ファイル 「" + e.FullPath + "」が削除されました。");
}
C private void fileSystemWatcher1_Renamed(object sender, System.IO.RenamedEventArgs e)
{
listBox1.Items.Insert(0, DateTime.Now.ToString() + " ファイル 「" + e.OldFullPath + "」から「" + e.FullPath + "」に名前が変更されました。");
}
今はリストボックスに監視結果が出るようにしています。
これをAのfileSystemWatcher1_Createdで新規作成を確認できたら
下記の要件を満たしたいと思っています。
1.label1にファイル名が入るようにしたい。
2.その後Wordを起動したい。
(編集中の待機の処理の仕方は必要?)
3.保存されたことを知れるようにしたい。
テキストファイルとWordファイルの起動の仕方が違うと考えていて、
色々参考サイトを探しましたが、これだ!というものが見つかりません。
もし、よろしければ
要件についての処理、もしくは、参考サイトを教えていただけないでしょうか?
よろしくお願いいたします。