【问题标题】:Easiest way to read text file which is locked by another application读取被另一个应用程序锁定的文本文件的最简单方法
【发布时间】:2010-11-26 05:24:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# filestream text-files


    【解决方案1】:

    我认为您只需要以下内容:

    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 可以做到这一点,尽管我希望它会做到。

    【讨论】:

    • 谢谢,为了从文件中取出整个字符串,我可以在 {} 之间放置的最短内容是什么? (我确实说过我很懒)
    • @Noldorin,谢谢。那是缺失的环节。我查看了 FileStream 上所有可用的方法,无法理解。
    • @Noldorin:关于信息,我有时间尝试一下,您必须包含 FileShare.ReadWrite 参数才能使其与 Excel 一起使用。
    • @Benjol:啊,我想这很有道理。总之很高兴知道。
    【解决方案2】:

    如果您想指定文件共享标志以打开正在使用的文件,那么您将无法使用 File.Open()。

    【讨论】:

    • 打开文件的是 Excel,所以 OP 无法控制。他只能希望 Excel 确实以读取共享模式打开它,并且自己以只读方式打开它。
    猜你喜欢
    • 1970-01-01
    • 2015-09-06
    • 2020-09-15
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多