2009-09-07 16 views
29

Tôi đã sử dụng File.ReadAllText để lấy một số csv, nhưng mỗi khi tôi quên đóng tệp trong Excel, ứng dụng sẽ ném ngoại lệ vì nó không thể có quyền truy cập vào tệp.Cách dễ nhất để đọc tệp văn bản bị khóa bởi ứng dụng khác

(Có vẻ điên với tôi, tôi có nghĩa là READ trong ReadAllText có vẻ khá rõ ràng)

Tôi biết rằng có File.Open với tất cả các chuông và còi, nhưng là có một phương pháp 'trung gian' mà doesn' t liên quan đến rối tung xung quanh với bộ đệm và mảng char?

Vâng, tôi lười biếng, vì vậy bỏ phiếu cho tôi xuống, chỉ cho tôi câu trả lời đầu tiên :)

Trả lời

45

Tôi nghĩ rằng bạn chỉ muốn những điều sau:

using (var fileStream = new FileStream("foo.bar", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
using (var textReader = new StreamReader(fileStream)) 
{ 
    var content = textReader.ReadToEnd(); 
} 

Các FileAccess.Read tham số là những gì là quan trọng, để chỉ ra rằng bạn chỉ muốn đọc tập tin. Tất nhiên, ngay cả khi thực hiện việc này, tệp Excel phải được mở ở chế độ chế độ đọc (xem FileShare enum trong .NET). Tôi đã không thử nghiệm, vì vậy tôi không thể đảm bảo rằng Excel thực hiện điều này, mặc dù tôi mong đợi nó.

+0

Cảm ơn, điều ngắn nhất tôi có thể đặt giữa {} để lấy toàn bộ chuỗi ra khỏi tệp là gì? (Tôi đã nói tôi đã lười biếng) – Benjol

+0

@ Benjol: Không sao cả. Cập nhật với mã để đọc tất cả văn bản. – Noldorin

+0

@Noldorin, cảm ơn. Đó là liên kết còn thiếu. Tôi đã xem xét tất cả các phương thức có sẵn trên FileStream, không thể hiểu được. – Benjol

0

Nếu bạn muốn chỉ định cờ chia sẻ tập tin để mở một tập tin đó đang được sử dụng, bạn' bị mắc kẹt với File.Open().

+1

Đó là Excel đang mở tệp, vì vậy OP không thể kiểm soát điều này. Anh ta chỉ có thể hy vọng Excel sẽ mở nó ở chế độ đọc chia sẻ, và mở nó chỉ đọc. – Noldorin

Các vấn đề liên quan