0

を使用してファイルを開こうとしていますOpenFileDialog

if (openFileDialog1.FileName != "" && resultSaveDialog == System.Windows.Forms.DialogResult.OK)
        {
            openFileDialog1.OpenFile(); // Throw Exception Here
            txtFileName.Text = openFileDialog1.SafeFileName;                
        }

しかし、ファイルが探索されたウィンドウで既に開かれている場合、次の例外がスローされます

別のプロセスで使用されているため、プロセスはファイル 'D:\Projects\CDR_RAW_FILES\GroupData\8859511378.xls' にアクセスできません。

OpenFileDialogファイルがウィンドウ エクスプローラーで既に開かれている場合でも、使用してファイルを開くことはできますか。

4

3 に答える 3

2

OK, 選択したファイル名とそのパスだけが必要な場合は, 以下のように試してみてください. 役に立ちます...

if (openFileDialog1.FileName != "" && resultSaveDialog == System.Windows.Forms.DialogResult.OK)
{
 string path = Path.GetDirectoryName(openFileDialog1.FileName);
 string filename = Path.GetFileName(openFileDialog1.FileName);
 txtFileName.Text = filename;
}
于 2013-05-13T07:16:46.680 に答える
0

はい、状況によっては可能です: 最初の可能性: 他のプログラムがファイルをロックしていない (たとえば、ファイルの変更のみを許可している) 場合、問題なく開くことができます。2番目の可能性: プログラムはファイルに書き込む必要はありませんが、読み取りのみが必要な場合は、読み取り専用モードで開くことができます。私はWinformsに精通していませんが、あなたの Openfiledialog.OPenfile メソッドはファイルを「読み書き」モードで開いているようです.2番目の可能性は窓の外にあります. ただし、My.Computer の下のクラスを使用する場合は、readalltext (問題によって異なります) などのメソッドを使用してファイルを開くだけで、読み取り専用のオーバーロードを受け入れることができます。

于 2013-05-13T07:02:28.710 に答える
0

追加するだけで、OpenFile() メソッドを使用してファイルを開く前にファイル名を取得できます。プロパティSafeFileNameまたはFileNameを使用して取得します。

if (openFileDialog1.FileName != "" && 
    resultSaveDialog == System.Windows.Forms.DialogResult.OK)
    {
        txtFileName.Text = openFileDialog1.SafeFileName;                
    }

私はこれをテストしていませんファイル名のみが必要でパス_.

ファイル名と拡張子だけでなく、ファイルへのフル パスが必要な場合は、FileNameプロパティを使用します。

if (openFileDialog1.FileName != "" && 
    resultSaveDialog == System.Windows.Forms.DialogResult.OK)
    {
        txtFileName.Text = openFileDialog1.FileName;                
    }

ファイル名には、ファイル パスと拡張子の両方が含まれます。ファイルが選択されていない場合、このメソッドは空の文字列 ("") を返します。

于 2013-05-13T07:33:21.370 に答える