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

好的,如果您只需要选定的文件名及其路径,然后尝试如下操作,它将帮助您...

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

是的,在某些情况下是可能的: 第一种可能性:其他程序没有锁定文件(例如只允许自己修改文件),而您可以毫无问题地打开它。第二个可能性:您的程序不需要写入文件,只需要读取它,您可以以只读模式打开它。我对 Winforms 并不熟悉,但您的 Openfiledialog.OPenfile 方法似乎以“读写”模式打开文件 - 所以第二种可能性不在窗口。但是,如果您愿意使用 My.Computer 下的类,您可以简单地使用 readalltext (取决于您的问题)之类的方法打开文件,这些方法应该接受只读重载。

于 2013-05-13T07:02:28.710 回答
0

只是补充一下,您可以在使用 OpenFile() 方法打开文件之前获取文件名。使用属性SafeFileNameFileName来获取它。

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

尽管我没有对此进行测试,但如果您只需要文件名而没有路径_ , SafeFileName应该可以满足您的需要。

如果您需要文件的完整路径而不仅仅是文件名和扩展名,请使用FileName属性:

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

文件名包括文件路径和扩展名。如果未选择任何文件,则此方法返回一个空字符串 ("")。

于 2013-05-13T07:33:21.370 回答