new FileStream(logfileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
打開FileStream不鎖定文件。
我可以這樣做File.ReadLines(string path)
?
new FileStream(logfileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
打開FileStream不鎖定文件。
我可以這樣做File.ReadLines(string path)
?
不......如果用反射看,你會看到,到底File.ReadLines
打開FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, 0x1000, FileOptions.SequentialScan);
所以只讀共享。
(在技術上打開與FileStream
一個StreamReader
如上所述)
我會補充說這似乎是孩子們的遊戲製作一個靜態方法來做到這一點:
public static IEnumerable<string> ReadLines(string path)
{
using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 0x1000, FileOptions.SequentialScan))
using (var sr = new StreamReader(fs, Encoding.UTF8))
{
string line;
while ((line = sr.ReadLine()) != null)
{
yield return line;
}
}
}
這將返回一個IEnumerable<string>
(如果該文件包含數千行,並且您只需要一次解析它們,那麼該文件會更好)。如果您需要一個數組,請使用LINQ將其稱爲ReadLines("myfile").ToArray()
。
從邏輯上說,如果文件在其「背後(方法)」改變,那麼所有的工作如何都是不確定的(它可能是技術上定義的,但定義可能很長且很複雜)
就ReSharper是一個剖析工具而言,在這種情況下應該使用Reflector – abatishchev 2011-03-17 11:49:08
@abatishchev:我不會將ReSharper描述爲剖析工具。我相信它現在也可以進行反編譯(可能只是在beta版本中)。 – 2011-03-17 11:50:25
如果行爲對應於「ReadLines」而不是「ReadAllLines」,爲什麼要調用方法'ReadAllLines'? – CodesInChaos 2011-03-17 11:51:49
File.ReadLines()
將鎖定文件直到完成。
答案應該代表解決方案,或者至少似乎應該指向這個方向。回答探索者已經知道你聲稱的事實,所以它沒有任何幫助。 – 2016-05-04 05:55:58
[文檔](http://msdn.microsoft.com/en-us/library/dd383503.aspx)沒有提到有關ReadLines的鎖定行爲的任何信息。因此,即使您使用的.net框架的實現不會鎖定文件,也不是您在開發應用程序時可以依賴的東西。 – Heinzi 2011-03-17 11:40:39