- - PR -
既に開いているファイルの取得
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-04-14 01:39
いつもお世話になっております。
VB.NET(Framework2.0)でアプリケーションを作成しております。 (独自ファイルを編集するアプリ) 自アプリを複数起動した場合、後に起動されたアプリは、 既に起動されているアプリのプロセスが利用しているファイルを取得し、 後に起動されたプロセスの開くファイルと同じであれば、 「既にそのファイルは開かれています」とメッセージを出し、 プロセスを終了したいのですが、どのようにプログラムを組めばよいのでしょうか? ちなみに、既に自アプリが起動されているかのチェックはできています。 どうかご教授下さい。 | ||||||||
|
投稿日時: 2008-04-14 07:45
ファイルを排他制御すればいいのでは?
| ||||||||
|
投稿日時: 2008-04-14 10:00
ご回答ありがとうございます。
ファイルはxmlファイルなのですが、 そのようなことできるのでしょうか? イメージとしては、Excelのような制御を考えているのですが。 [ メッセージ編集済み 編集者: bean 編集日時 2008-04-14 10:02 ] | ||||||||
|
投稿日時: 2008-04-14 10:20
ファイルであれば、中身を問わずできます
| ||||||||
|
投稿日時: 2008-04-14 10:21
ファイルであれば、中身を問わずできます
| ||||||||
|
投稿日時: 2008-04-14 22:19
ご回答ありがとうございます。
確かに、ファイルストリームを開くことで排他制御はできました。 しかし、実を言うとxmlは画面に貼り付けた市販コンポーネントが使用します。 ※市販コンポーネントのFileOPENメソッドでxmlを開く。 排他制御したあとFileOpenすると自身がファイルを開けなくなってしまいます。 すると既に起動しているプロセスから開いているファイル名を 取得する方法しかないと思うのですが、何か良い方法はないでしょうか? | ||||||||
|
投稿日時: 2008-04-14 22:51
それは「開いているファイル」とは言えないのでは? 市販コンポーネントに渡す時点で(OSからみて)開いていないことが求められているのですし。 #市販のコンポーネントに渡す時に、全く別のアプリによって占有されていた場合はどうなるのかな?と疑問に感じます。 本当の望みは、プロセス間で文字列をやりとりする方法ですか? リモーティングとか、WCFとか、メッセージとか、メモリマップドファイルとか、多種多様の手段が考えられますが、何を持って「良い方法」と言えるのかは分かりません。 | ||||||||
|
投稿日時: 2008-04-15 09:12
本来は開く際に共有しないよう開くべきです。
いいえ。他にも方法はあります。 激しくめんどくさいですが。 プロセスからファイル名を取得する方法もあります。 以下のツールを使うといいでしょう。 http://technet.microsoft.com/ja-jp/sysinternals/bb896655(en-us).aspx ですが、それがbeanさんの本当に必要としているものかはわかりません。 [ メッセージ編集済み 編集者: れい 編集日時 2008-04-15 09:13 ] |