读取被另一个应用程序锁定的文本文件的最简单方法

问题描述 投票:0回答:2

我一直在使用

File.ReadAllText()
打开 CSV 文件,但每次我忘记在 Excel 中关闭文件时,应用程序都会抛出异常,因为它无法访问该文件。

(对我来说似乎很疯狂,我的意思是 ReadAllText 中的 READ 看起来很清楚)

我知道有 File.Open 具有所有花哨的功能,但是有没有一种“中间”方法不涉及弄乱缓冲区和字符数组?

c# filestream text-files
2个回答
70
投票

我认为你只想要以下内容:

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();
}

1
投票

如果您想指定文件共享标志以打开正在使用的文件,则只能使用 File.Open()。

© www.soinside.com 2019 - 2024. All rights reserved.