2009-03-18 23 views

Trả lời

2

Nếu bạn có quyền kiểm soát của quá trình đầu tiên mà bạn có thể chỉ định tập tin xử lý loại cổ phiếu

string contents1; 
string contents2; 
using (FileStream fs1 = new FileStream("test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
{ 
    using (var tr1 = new StreamReader(fs1)) 
    { 
     using (FileStream fs2 = new FileStream("test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
     { 
      using (var tr2 = new StreamReader(fs2)) 
      { 
       contents2 = tr2.ReadToEnd(); 
       contents1 = tr1.ReadToEnd(); 
      } 
     } 
    } 
} 

Console.WriteLine(contents1); 
Console.WriteLine(contents2); 
+0

Tôi không có quyền kiểm soát quá trình khóa tệp. – Malfist

9

Câu hỏi này là khá cũ rồi, nên câu trả lời của tôi có thể không được sử dụng nhiều cho bạn, nhưng SO là một Q & Một trang web có thể vẫn giúp người khác.

tôi không thể/không muốn đặt xuống toàn bộ thực hiện, nhưng các thủ tục là đi một cái gì đó như thế này:

  1. Bạn tạo một Volume Shadow Copy qua Volume Shadow Provider cho ổ đĩa nơi tập tin của bạn được đọc nằm (đây là tài liệu trên MSDN, cũng có một khách hàng mẫu tạo ra các bản sao bóng này và rất có thể sẽ đủ cho bạn)

  2. Hoặc là tạo một liên tục hoặc sử dụng cơ chế "gọi lại" (gọi cho ứng dụng của bạn)

  3. Mở tập tin mong muốn thông qua đường dẫn UNC và CreateFile (UNC trông giống như sau: \\ \ GlobalRoot \ Devices \ HarddiskVolumeShadowCopyXZY \ yourpath \ yourfile.yourextension?)

  4. Đỗ bất cứ điều gì bạn muốn với các tập tin

  5. Nếu bạn đã thực hiện một VSC dai dẳng, bạn nên sử dụng máy khách mẫu để xóa nó sau khi bạn đã hoàn tất

biết thêm ở đây: http://technet.microsoft.com/en-us/library/cc785914%28WS.10%29.aspx và ở đây: http://msdn.microsoft.com/en-us/library/bb968832%28VS.85%29.aspx

+2

Vấn đề là các công cụ quản lý tệp tích hợp của .NET không thể truy cập vào chỉ thị \\? \ GlobalRoot. Bạn thực sự phải thả xuống mức winapi. Có một thư viện gọi là AlphaFSS có thể, nhưng nó có một số vấn đề lớn. Tôi sử dụng nó trong một thời gian nhưng chạy vào các vấn đề với kích thước tập tin yêu cầu cả hai DWORD để đại diện cho kích thước của nó, AlphaFSS chỉ đọc DWORD thấp hơn. – Malfist

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