目前,這是怎麼了,我打開一個文件來閱讀:打開文件只讀
using (TextReader reader = new StreamReader(Path.Combine(client._WorkLogFileLoc, "dump.txt")))
{
//do stuff
}
我怎麼能打開以只讀模式文件,因此,如果另一進程同時打開的文件時間,我的程序仍然可以讀取它。
目前,這是怎麼了,我打開一個文件來閱讀:打開文件只讀
using (TextReader reader = new StreamReader(Path.Combine(client._WorkLogFileLoc, "dump.txt")))
{
//do stuff
}
我怎麼能打開以只讀模式文件,因此,如果另一進程同時打開的文件時間,我的程序仍然可以讀取它。
典型的問題是,其他進程有文件打開寫入。所有標準的File方法和StreamReader構造函數都使用FileShare.Read打開文件。這是行不通的,否認寫分享。你不能否認寫作,另一個過程是第一個,並有寫入權限。所以你會被拒絕訪問。
你必須使用FileShare.ReadWrite,像這樣:
var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using (var sr = new StreamReader(fs))
{
// etc...
}
要小心,你仍然有一個棘手的問題,你正在閱讀半書面文件。其他進程在隨機時間點將數據刷新到文件中,您可能只讀取了半行文本。因人而異。
你可以通過調用File.SetAttributes
string path = Path.Combine(client._WorkLogFileLoc, "dump.txt");
FileAttributes curAttributes = File.GetAttributes(path);
File.SetAttributes(path, curAttributes | FileAttributes.ReadOnly);
如果你要打開的文件的只讀設置文件屬性,試試這個:
using (TextReader reader = new StreamReader(File.OpenRead(Path.Combine(client._WorkLogFileLoc, "dump.txt")))) {
//do stuff
}
通知調用File.OpenRead()。
你想在閱讀模式下打開流?或者你想設置文件屬性ReadOnly? – 2011-02-11 01:08:55
想要打開它只讀 – xbonez 2011-02-11 01:11:42
請注意,如果另一個進程打開該文件,該進程仍必須啓用讀共享才能夠讀取它。如果其他進程以共享被拒絕的方式打開文件,那麼即使以只讀方式打開文件也會被阻止。有關更多信息,請參閱FileShare枚舉(或Win32等效)。 – itowlson 2011-02-11 01:16:27