如何选择已使用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; } 

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

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

正在使用的文件屏幕截图

以下代码似乎有所帮助:

 ofdBrowseVInv.ValidateNames = false; 

在这里查看更多信息http://social.msdn.microsoft.com/Forums/vstudio/en-US/56fbbf9b-31d5-4e89-be85-83d9cb1d538c/openfiledialog-this-file-is-in-use?forum=netfxbcl

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

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

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

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

这段代码非常适合我。

 ofdBrowseVInv.ValidateNames = false;