2009-09-07 47 views
29

我一直在使用File.ReadAllText来抓取一些csv,但每次我忘记关闭Excel中的文件时,应用程序都会抛出一个异常,因为它不能访问该文件。最简单的方法来读取被另一个应用程序锁定的文本文件

(好像疯了,我的意思是读取ReadAllText似乎非常清楚)

我知道有File.Open与所有的花里胡哨,但有其没有按”一“中间”的方法t涉及缓冲区和char数组?

是的,我很懒,所以我投了下来,正好给我答案第一:)

回答

45

我觉得你只是想以下几点:

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以读取共享模式打开(请参阅FileShare .NET中的枚举)。我没有测试过,所以我不能保证Excel能做到这一点,尽管我希望它能做到。

+0

谢谢,我可以在{}之间放置整个字符串到文件之外的最短的东西是什么? (我说我是懒惰的) – Benjol 2009-09-07 13:25:30

+0

@ Benjol:没问题。用代码更新以读取所有文本。 – Noldorin 2009-09-07 13:46:56

+0

@Noldorin,谢谢。那是缺失的环节。我查看了FileStream上的所有可用方法,无法理解。 – Benjol 2009-09-07 14:02:23

0

如果您想以此来打开一个文件,该文件在使用指定的文件共享标志,你”重新卡住File.Open()。

+1

这是打开文件的Excel,所以OP无法控制这个。他只希望Excel能够以阅读共享模式打开它,并自己以只读方式打开它。 – Noldorin 2009-09-07 12:27:41

相关问题