我一直在使用File.ReadAllText()
打开CSV文件,但每次在Excel中忘记关闭文件时,应用程序会抛出异常,因为它无法访问该文件。
(对我来说似乎很疯狂,毕竟ReadAllText中的READ看起来非常清晰)
我知道有File.Open和所有花里胡哨的东西,但是否有一种“中间”方法不涉及缓冲区和char数组的操作?
我一直在使用File.ReadAllText()
打开CSV文件,但每次在Excel中忘记关闭文件时,应用程序会抛出异常,因为它无法访问该文件。
(对我来说似乎很疯狂,毕竟ReadAllText中的READ看起来非常清晰)
我知道有File.Open和所有花里胡哨的东西,但是否有一种“中间”方法不涉及缓冲区和char数组的操作?
我认为你只是想要以下内容:
using (var fileStream = new FileStream("foo.bar", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var textReader = new StreamReader(fileStream))
{
var content = textReader.ReadToEnd();
}
FileAccess.Read
参数很重要,它表明您只想读取文件。当然,即使这样做,文件也必须在Excel中以“read-share”模式打开(请参见.NET中的FileShare
枚举)。尽管我希望如此,但我没有测试过Excel是否会这样做。
[编辑] 这是一个方法版本:
static string ReadAllText(string file)
{
using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var textReader = new StreamReader(fileStream))
return textReader.ReadToEnd();
}
如果您想指定文件共享标志以打开正在使用的文件,则只能使用File.Open()。