簡體   English   中英

讀取文件而不會導致拒絕其他進程的訪問

[英]Reading a file without causing access denial to other processes

我一直在考慮編寫一個小型的專用備份應用程序,類似於Windows 8中新引入的文件歷史記錄。基本思想是每N小時掃描一些目錄以查找更改的文件並將它們復制到另一個卷。 問題是,某些其他應用程序在備份文件時可能會請求訪問這些文件並被拒絕訪問,從而可能導致各種麻煩的問題。

據我所知,有幾種解決該問題的方法:

1)使用卷影復制服務

以我的觀點,這件事的未來是不確定的,IO負載過重時的開銷可能會使系統癱瘓。

2)打開文件時使用共享模式

像這樣的東西大多有效...

using (var stream = new FileStream("test.txt", FileMode.Open, FileAccess.Read,
    FileShare.Delete | FileShare.ReadWrite | FileShare.Read | FileShare.Write))
{
    [Copy data]
}

...直到其他進程請求訪問不帶FileShare.Read的相同文件,此時將拋出IOException。

3)使用可能被其他(寫?)請求“破壞”的機會鎖

FileIO.ReadTextAsync的這種行為看起來與我想要的完全一樣,但是它也看起來非常特定於實現,並且將來可能會更改。 有人知道嗎,如何通過C#或C ++在本地顯式對文件進行鎖定?

也許有一些簡單的C#方法(例如File.TryReadBytes)提供了這種“禮貌”的閱讀? 我對適用於Windows 7及更高版本的解決方案感興趣。

我的投票是關於VSS的。 主要原因是它不會干擾其他修改文件的過程,因此可以提供一致性。 可能的不一致幾乎破壞了備份的目的。 該API穩定,我不會擔心它的未來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM