打开文件已在窗口浏览器中打开

时间:2013-05-13 06:54:24

标签: c# winforms openfiledialog

我正在尝试使用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打开文件。

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

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

答案 2 :(得分: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;                
    }

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