我一直在使用
File.ReadAllText()
打开 CSV 文件,但每次我忘记在 Excel 中关闭文件时,应用程序都会抛出异常,因为它无法访问该文件。
(对我来说似乎很疯狂,我的意思是 ReadAllText 中的 READ 看起来很清楚)
我知道有 File.Open 具有所有花哨的功能,但是有没有一种“中间”方法不涉及弄乱缓冲区和字符数组?
我认为你只想要以下内容:
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()。