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