我正在尝试选择已在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;
}
选择文件后..我收到消息:正在使用的文件
任何人都可以告诉我如何选择已经打开的文件......
答案 0 :(得分:8)
以下代码似乎有所帮助:
ofdBrowseVInv.ValidateNames = false;
答案 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;