最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#?使用?Filestream?修改大文件指定位置數(shù)據(jù)

 更新時(shí)間:2022年09月30日 08:57:59   作者:i聽(tīng)音樂(lè)的猿  
這篇文章主要介紹了C#?使用?Filestream修改大文件指定位置數(shù)據(jù),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

前言

C# 中讀寫(xiě)文件常規(guī)流程

FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
//讀
StreamReader sr=new StreamReader(fs);
string line=sr.readLine();

//寫(xiě)
StreamWriter s = new StreamWriter(fs);
s.WriteLine("xxx");

至于修改內(nèi)容 網(wǎng)上大多數(shù)是先把文件所有內(nèi)容讀進(jìn)內(nèi)存,再把內(nèi)容修改后寫(xiě)入文件,這樣對(duì)于小文件沒(méi)有問(wèn)題,但是對(duì)于大文件就不可行了;

操作步驟

  • 我們首先寫(xiě)一個(gè)函數(shù)來(lái)讀取一行數(shù)據(jù)
   /// <summary>
   /// 在文件流當(dāng)前位置開(kāi)始讀取改行的內(nèi)容 返回改行的長(zhǎng)度
   /// </summary>  
   private long readRow(FileStream fs20O)
   {
            long len = 0;

            byte[] b = new byte[1];

            bool exit = false;

            while (true)
            {
                if (fs20O.Read(b, 0, 1) == -1) break;

                len++;
                string str = Encoding.UTF8.GetString(b);
                Console.Write(str);
                if ("\n".Equals(str))
                {
                    return len;
                }
            }

            return len;
     }

然后有人會(huì)問(wèn)了,為啥我不用 StreamReader.readLine()來(lái)讀取一行呢?

由于接下來(lái)需要修改當(dāng)前行的內(nèi)容,讀取完當(dāng)前行并確定需要修改的時(shí)候,需要把流的位置移動(dòng)至行首,根據(jù)上面函數(shù)得到讀取的長(zhǎng)度,使用代碼

 fs.Seek(-len, SeekOrigin.Current);

如果用len=StreamReader.readLine(),再移動(dòng)指針,你會(huì)發(fā)現(xiàn)流的位置會(huì)在更后面而不是偏移了len,不知道readLine是不是會(huì)預(yù)讀取,導(dǎo)致你覺(jué)得他只讀取了一行,實(shí)際他把流的指針移到后幾行了并且緩存了數(shù)據(jù),再做偏移的時(shí)候 結(jié)果就不對(duì)了 這就是為什么要用上面的方法讀取了;

  • 好了,接下來(lái)遍歷讀取文件內(nèi)容
long len=0;
while((len=readRow(fs)!=-1)
{
    //......
    //修改內(nèi)容
    //文件指針移動(dòng)至行首
    if(true)
    {
        fs.Seek(-len, SeekOrigin.Current);
        byte[] readWriteByte = Encoding.UTF8.GetBytes("Test");
        //會(huì)直接把原來(lái)內(nèi)容替換
        fs.Write(readWriteByte, 0, readWriteByte.Length);
        //***繼續(xù)往下讀取 直到行尾 把指針移到下一行行首
        readRow(fs);

        //修改完成直接跳出循環(huán),保存文件
        break;
    }
}

到此這篇關(guān)于C# 使用 Filestream 修改大文件指定位置數(shù)據(jù)的文章就介紹到這了,更多相關(guān)C# Filestream 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

西安市| 文登市| 盘锦市| 日照市| 钟山县| 扎鲁特旗| 遵化市| 隆昌县| 屏东市| 分宜县| 乌拉特前旗| 台安县| 光山县| 新丰县| 陇川县| 彰化县| 平泉县| 平阴县| 江城| 河间市| 江口县| 施甸县| 揭东县| 金堂县| 河津市| 灵石县| 商城县| 桐城市| 香河县| 抚州市| 彩票| 建阳市| 阿拉善盟| 喜德县| 微山县| 天祝| 楚雄市| 谷城县| 昔阳县| 如皋市| 平和县|