2013-08-05 20 views
6

Tôi đang đọc tệp định kỳ được viết bởi chương trình của bên thứ ba. Im đọc bằng cách sử dụng FileStream dưới đây:Đọc một tệp mà không gây ra IOException trên chương trình của bên thứ ba

using (FileStream fs = new FileStream(
         FullPath, 
         FileMode.Open, 
         FileAccess.Read, 
         FileShare.ReadWrite)) 

Tuy nhiên các chương trình của bên thứ 3 được viết vào tập tin nhưng đang sử dụng FileShare.None

Vì vậy, thỉnh thoảng tôi đã có tập tin mở để đọc khi chương trình bên thứ 3 cố mở tệp bằng quyền truy cập độc quyền nhưng không thành công.

Làm cách nào để đọc tệp này mà không gây ra sự cố cho chương trình của bên thứ 3? Tôi sẽ không phiền khi đọc sách để ưu tiên cho một ứng dụng khác. Bất kỳ cách nào để làm điều này?

+0

Bạn đã cố gắng sao chép nó vào một vị trí tạm thời và đọc từ đó? Thông thường những gì tôi làm là tạo ra một chức năng cố gắng đọc một tập tin nếu nó sử dụng nó trả về false nhưng nếu không trả về true thì tôi cố gắng sao chép và di chuyển tệp đến một vị trí tôi có thể làm việc với nó. Làm việc với một tập tin sản xuất có thể có khả năng nguy hiểm, đặc biệt là với 2 quy trình trong hỗn hợp. – Bearcat9425

+0

File.Copy chỉ thực hiện một FileStream trong nền. Vấn đề không phải là khi tôi cố đọc và bị khóa. Khi tôi có quyền truy cập vào tệp và chương trình của bên thứ ba cố gắng giành quyền truy cập độc quyền nhưng không thể vì tôi đã mở nó. – CathalMF

+0

Nếu bạn sao chép tệp vào vị trí tạm thời và để chương trình của bạn sử dụng tệp tạm thời đó sao cho tệp gốc không được sử dụng và do đó vẫn có thể được chương trình bên thứ ba truy cập mà không gặp sự cố. Nếu điều đó có ý nghĩa: D – aladd04

Trả lời

1

Những gì bạn muốn làm là theo dõi các thông báo tạo quy trình và khi bạn thấy quy trình cụ thể xuất hiện, bạn sẽ muốn thoát ra khỏi con đường của nó.

IWbemServices::ExecNotificationQuery

Dưới đây là một số một số biết thêm chi tiết tắt của MSDN. Đây cũng là một CodeProject: Process Information and Notifications using WMI

+0

Thật không may là quá trình khác là một dịch vụ nên luôn chạy. – CathalMF

1

Nếu quá trình xử lý bên thứ ba này (.exe, dịch vụ cửa sổ, ứng dụng web, v.v.) dừng lại, bạn có thể truy cập vào tệp khi điều đó xảy ra cho biết khi nào nó sẽ chạy, bạn có thể sao chép tệp này ngay sau khi bạn bật máy chủ.

Điều này sẽ hợp lệ hoặc không phụ thuộc vào tính chất của ứng dụng của bạn và ứng dụng còn lại và tần suất bạn cần đọc tệp này.

+0

Nah nó không bao giờ dừng lại. – CathalMF

+0

Có thể dịch vụ này có một số phương pháp công khai từ nơi bạn có thể nhận được cùng một thông tin có trong tệp. –

1

Trong khi tôi chưa sử dụng, bạn đã thử sử dụng phương pháp System.IO.Filestream.Unlock để giúp bạn phát trực tuyến các phần của tệp hiện không bị phần mềm khác khóa không? Tôi sẽ chỉ giả định phần mềm khác không khóa toàn bộ tập tin.

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