Vấn đề điển hình là quy trình khác có tệp mở để ghi. Tất cả các phương thức File tiêu chuẩn và các nhà xây dựng StreamReader đều mở tệp bằng FileShare.Read. Điều đó không thể làm việc, điều đó phủ nhận việc chia sẻ viết. Bạn không thể từ chối viết, quá trình khác là đầu tiên và có quyền ghi. Vì vậy, bạn sẽ bị từ chối truy cập để thay thế.
Bạn phải sử dụng FileShare.ReadWrite, như thế này:
var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using (var sr = new StreamReader(fs))
{
// etc...
}
Ghi chú rằng bạn vẫn sẽ có một vấn đề khó khăn, bạn đang đọc một tập tin nửa bằng văn bản. Quá trình khác xóa dữ liệu vào tệp tại các điểm ngẫu nhiên trong thời gian, bạn cũng có thể đọc chỉ một nửa dòng văn bản. YMMV.
Nguồn
2011-02-11 01:29:59
Bạn muốn mở luồng ở chế độ Đọc? Hay bạn muốn đặt thuộc tính tệp ReadOnly? –
Muốn mở nó ReadOnly – xbonez
Lưu ý rằng nếu một tiến trình khác có tệp đang mở, quá trình đó vẫn phải bật tính năng chia sẻ đọc để bạn có thể đọc nó. Nếu quá trình khác mở tệp có chia sẻ bị từ chối, thì ngay cả khi mở tệp ở dạng chỉ đọc sẽ bị ngăn chặn. Xem liệt kê FileShare (hoặc tương đương Win32) để biết thêm thông tin. – itowlson