【问题标题】:Open File Which is already open in window explorer打开已在窗口资源管理器中打开的文件
【发布时间】:2013-05-13 06:54:23
【问题描述】:

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

【问题讨论】:

  • (克隆/复制)&打开
  • 为什么要打开文件...?获取任何数据...?或者只是读取文件名...?
  • @Pandian 只是为了获取打开的文件名和路径
  • @RajeevKumar 您只需要文件名及其路径,然后尝试我添加的解决方案

标签: c# winforms openfiledialog


【解决方案1】:

好的,如果你只需要选择的文件名和路径,那么试试下面的方法,它会帮助你...

if (openFileDialog1.FileName != "" && resultSaveDialog == System.Windows.Forms.DialogResult.OK)
{
 string path = Path.GetDirectoryName(openFileDialog1.FileName);
 string filename = Path.GetFileName(openFileDialog1.FileName);
 txtFileName.Text = filename;
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

    【解决方案3】:

    只是补充一点,您可以在使用 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;                
        }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多