我在C#中构建一个应用程序,我必须打开一个CSV文件来从中读取数据.当我尝试从C#打开CSV文件时,我在Excel中打开该文件时出现异常.例外情况表明该进程无法访问该文件,因为该文件已经打开.即使在其他应用程序中打开文件,如何解决此问题并打开文件?
谢谢,拉克什.
这是可能的,但您必须小心控制您指定的文件共享.大多数.NET类默认为FileShare.Read,拒绝写入文件的另一个进程.但是,如果文件由Excel打开,它就无法工作,它已经获得了对它的写入权限.你不能否认已经获得的权利.
要解决此问题,请使您的代码看起来与此类似:
using (var fs = new FileStream(@"c:\\temp\\test.csv", FileMode.Open,
FileAccess.Read, FileShare.ReadWrite))
using (var sr = new StreamReader(fs)) {
// Read it...
}
Run Code Online (Sandbox Code Playgroud)
请注意FileShare.ReadWrite的使用.我验证了此代码有效,而Excel已打开test.csv.
请注意您可能会遇到的麻烦,当Excel在读取文件时写入文件时会发生奇怪的事情.你可能会阅读垃圾,旧数据的一部分,新的一部分,没有一个很好的诊断方法.
一段时间后我遇到了这个问题.
您缺少FileShare参数.如果不指定,如果打开文件,它将由您的应用程序专门锁定.但由于它已经由Excel(或任何其他应用程序)打开,您将收到一个例外.
你可以尝试使用它 - 我认为这将是你最好的选择 -
using (FileStream fs = File.Open(<file-path>, FileMode.Open, FileAccess.Read, FileShare.Read))
这段代码说:Hello Excel!如果您可以允许(读取,而不是抛出异常),我想阅读该文件,但我不会尝试拥有它,我知道您可以随时修改它.
如果这会引发错误,那么Excel甚至拒绝您进行读取访问.那太糟糕了!祝一切顺利.