我一直在使用File.ReadAllText来抓取一些csv,但每次我忘记关闭Excel中的文件时,应用程序都会抛出一个异常,因为它不能访问该文件。最简单的方法来读取被另一个应用程序锁定的文本文件
(好像疯了,我的意思是读取ReadAllText似乎非常清楚)
我知道有File.Open与所有的花里胡哨,但有其没有按”一“中间”的方法t涉及缓冲区和char数组?
是的,我很懒,所以我投了下来,正好给我答案第一:)
我一直在使用File.ReadAllText来抓取一些csv,但每次我忘记关闭Excel中的文件时,应用程序都会抛出一个异常,因为它不能访问该文件。最简单的方法来读取被另一个应用程序锁定的文本文件
(好像疯了,我的意思是读取ReadAllText似乎非常清楚)
我知道有File.Open与所有的花里胡哨,但有其没有按”一“中间”的方法t涉及缓冲区和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以读取共享模式打开(请参阅FileShare
.NET中的枚举)。我没有测试过,所以我不能保证Excel能做到这一点,尽管我希望它能做到。
如果您想以此来打开一个文件,该文件在使用指定的文件共享标志,你”重新卡住File.Open()。
这是打开文件的Excel,所以OP无法控制这个。他只希望Excel能够以阅读共享模式打开它,并自己以只读方式打开它。 – Noldorin 2009-09-07 12:27:41
谢谢,我可以在{}之间放置整个字符串到文件之外的最短的东西是什么? (我说我是懒惰的) – Benjol 2009-09-07 13:25:30
@ Benjol:没问题。用代码更新以读取所有文本。 – Noldorin 2009-09-07 13:46:56
@Noldorin,谢谢。那是缺失的环节。我查看了FileStream上的所有可用方法,无法理解。 – Benjol 2009-09-07 14:02:23