0

私のプロジェクトでは、テキストファイルを開こうとしています。以下のコードは機能しますが、ユーザーがボタンを何度もクリックすると、多くのファイルが開かれます。(私はしたくない)

System.Diagnostics.Process.Start(filePath);

私もこれを試しましが、テキストファイルを開いておらず、エラーも表示されていません(try catchブロックで試しました)File.OpenFile.OpenText

File.Open(filePath); (or)
File.OpenText(filePath); (or)
FileStream fileStream = new FileStream(filePath, FileMode.Open);

私もこれを試しました:(エラー:代わりにタイプ名で修飾されたインスタンス参照ではアクセスできません)

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.Start(filePath);  /*red scribbles here*/
proc.WaitForExit();

テキストファイル(.txt)のインスタンスを1つだけ表示する方法。私は自分の試みで何か間違ったことをしていますか?提案してください。

編集:

後で他のテキストファイルを開きたいのですが、同じではありません。また、テキストファイル(または多数)を開いた後、アプリケーションにアクセスできる必要があります。フォームは1つだけです。

4

2 に答える 2

4

フォーム レベルで辞書を作成します。

public Dictionary<string, Process> OpenedProcesses = new Dictionary<string, Process>(StringComparer.OrdinalIgnoreCase);

ここで、ファイルを開く方法を変更します (HasExitedチェックに注意してください。これは、ユーザーがメモ帳を閉じて再度開くことができるようにするために必要です)。

// make sure that path is always in form C:\Folder\file.txt - less chance of different 
// paths pointing to the same file.
filePath = System.IO.Path.GetFullPath(filePath);

Process proc;
if (this.OpenedProcesses.TryGetValue(filePath, out proc) && !proc.HasExited)
{
    MessageBox.Show("The file is already open!");
    // it could be possible to activate the window of the open process but that is another question on its own.
    return;
}

proc = System.Diagnostics.Process.Start(filePath);
this.OpenedProcesses[filePath] = proc;
于 2012-11-14T10:30:40.260 に答える
0

ファイルが開いているかどうかを確認します

そして、あなたが望むようにあなたの仕事をします。

于 2012-11-14T10:29:58.190 に答える