2009-09-07 21 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

相關問題