国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

FileStream 的FileShare一點小認識

2019-11-17 02:59:09
字體:
來源:轉載
供稿:網友

FileStream 的FileShare一點小認識

C#讀寫文本文件一般都是用StreamWriter來實現(讀書的時候就這樣用,畢業后這幾年基本也是這樣干的),通常代碼如下:

using (StreamWriter sw = new StreamWriter(logpath,true,Encoding.UTF8)) { sw.WriteLine(msg); }

如果是web開發或則其他多線程的時候一般都是加鎖(用lock),如果不同lock就會有error如:

這天我一同事推薦我說用FileStream可以不用lock,在多線程的情況下是不會有問題的,代碼如下:

using (FileStream fs = new FileStream(logpath, FileMode.Append, Fileaccess.Write, FileShare.ReadWrite)) { using (StreamWriter sw = new StreamWriter(fs)) { sw.Write(msg); } }

經過測試后發現在多線程下卻實沒有問題,于是回頭查看了以下StreamWriter的定義,

[SecurityCritical]internal StreamWriter(string path, bool append, Encoding encoding, int bufferSize, bool checkHost) : base(null){    if (path == null)    {        throw new ArgumentNullException("path");    }    if (encoding == null)    {        throw new ArgumentNullException("encoding");    }    if (path.Length == 0)    {        throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));    }    if (bufferSize <= 0)    {        throw new ArgumentOutOfRangeException("bufferSize", Environment.GetResourceString("ArgumentOutOfRange_NeedPosNum"));    }    Stream streamArg = CreateFile(path, append, checkHost);    this.Init(streamArg, encoding, bufferSize, false);}[SecurityCritical]PRivate static Stream CreateFile(string path, bool append, bool checkHost){    return new FileStream(path, append ? FileMode.Append : FileMode.Create, FileAccess.Write, FileShare.Read, 0x1000, FileOptions.SequentialScan, Path.GetFileName(path), false, false, checkHost);}

注意這里的CreateFile方法,里面用的是FileShare.Read,有關Read和ReadWrite 的區別如下:

Read 允許隨后打開文件讀取。如果未指定此標志,則文件關閉前,任何打開該文件以進行讀取的請求(由此進程或另一進程發出的請求)都將失敗。但 是,即使指定了此標志,仍可能需要附加權限才能夠訪問該文件。

ReadWrite允許隨后打開文件讀取或寫入。如果未指定此標志,則文件關閉前,任何打開該文件以進行讀取或寫入的請求(由此進程或另一進程發出)都將失敗。但是,即使指定了此標志,仍可能需要附加權限才能夠訪問該文件。

我想單獨就FileShare屬性大家都知道,可是在這里就StreamWriter和FileStream大家是否也知道這個問題了。有關StreamReader/StreamWriter與FileStream用法詳解如下:

http://blog.csdn.net/sansan52048/article/details/9160995

所以在涉及到文件操作的時候建議大家盡量用底層的FileStream操作。軟件就是這樣要不斷學習、不斷總結、不斷前進。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 化隆| 武胜县| 永嘉县| 长垣县| 吉首市| 新河县| 高安市| 阳东县| 平南县| 济源市| 荆门市| 大渡口区| 岳阳市| 巴林右旗| 武穴市| 邯郸县| 巴彦淖尔市| 凤山县| 沅陵县| 霍邱县| 卢龙县| 宁武县| 灵寿县| 台中市| 永寿县| 武胜县| 鄯善县| 凤庆县| 浦江县| 富顺县| 宜川县| 运城市| 万安县| 吉安县| 佛冈县| 安达市| 弥渡县| 江西省| 芮城县| 岗巴县| 渭南市|