如何使用OpenFileDialog选择已打开的文件

时间:2014-03-12 05:22:08

标签: c# openfiledialog

我正在尝试选择已在quickbook软件中打开的文件。

代码:

 OpenFileDialog ofdBrowseVInv = new OpenFileDialog();

            ofdBrowseVInv.Title = "Locate QuickBook Company File";
            ofdBrowseVInv.Filter = "QuickBook Company File (*.qbw,*.qbw)|*.qbw;*.qbm";
            ofdBrowseVInv.FileName = "";


           if (ofdBrowseVInv.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                string strfilename = ofdBrowseVInv.InitialDirectory + ofdBrowseVInv.FileName;

            }

选择文件后..我收到消息:正在使用的文件

任何人都可以告诉我如何选择已经打开的文件......

File in use Screen shot

3 个答案:

答案 0 :(得分:8)

答案 1 :(得分:2)

使用打开的文件对话框查找文件不会产生您描述的错误,因此我假设您随后打开了该文件。打开另一个进程已经打开的文件通常会失败,因为另一个进程锁定了文件,因此打开一个“已经打开”的文件可能就不可能了。

但是,如果其他进程(可能是QuickBooks)打开了允许读取共享的文件,则可以通过指定正确的共享模式来打开文件。通常,您将使用File.OpenRead方法打开文件进行阅读,该方法将使用FileShare.Read。这会失败,因为其他进程已经有权写入该文件。但是,您可以使用FileShare.ReadWrite方法指定共享模式File.Open

using (var fileStream = File.Open(strfilename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
  // ... read from fileStream
}

如果其他进程允许读取共享,您将能够读取该文件。但是,如果没有,您将无法读取该文件,除了关闭其他应用程序中的文件外,您无法做很多事情。

答案 2 :(得分:1)

这段代码非常适合我。

ofdBrowseVInv.ValidateNames = false;