欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

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

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

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

操作步驟

  • 我們首先寫一個函數(shù)來讀取一行數(shù)據(jù)
   /// <summary>
   /// 在文件流當前位置開始讀取改行的內容 返回改行的長度
   /// </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;
     }

然后有人會問了,為啥我不用 StreamReader.readLine()來讀取一行呢?

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

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

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

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

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

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

相關文章

  • 淺聊一下C#中內存映射文件的玩法

    淺聊一下C#中內存映射文件的玩法

    內存映射文件是怎么玩的,說實話這東西理論我相信很多朋友都知道,就是將文件映射到進程的虛擬地址,說起來很容易,那如何讓大家眼見為實呢,本文就來和大家簡單聊聊
    2023-06-06
  • WPF MVVM制作發(fā)送短信小按鈕

    WPF MVVM制作發(fā)送短信小按鈕

    這篇文章主要為大家詳細介紹了WPF MVVM發(fā)送短信小按鈕的制作方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • C#實現(xiàn)串口通信的示例詳解

    C#實現(xiàn)串口通信的示例詳解

    這篇文章主要為大家詳細介紹了C#實現(xiàn)簡單串口通信的相關知識,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2023-03-03
  • C#實現(xiàn)簡易灰度圖和酷炫HeatMap熱力圖winform(附DEMO)

    C#實現(xiàn)簡易灰度圖和酷炫HeatMap熱力圖winform(附DEMO)

    本文主要介紹了C#實現(xiàn)簡易灰度圖和酷炫HeatMap熱力圖winform(附DEMO),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • C#多線程學習之(五)使用定時器進行多線程的自動管理

    C#多線程學習之(五)使用定時器進行多線程的自動管理

    這篇文章主要介紹了C#多線程學習之使用定時器進行多線程的自動管理,實例分析了C#使用timer定時器類實現(xiàn)針對多線程的自動管理功能,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#實現(xiàn)過濾sql特殊字符的方法集合

    C#實現(xiàn)過濾sql特殊字符的方法集合

    這篇文章主要介紹了C#實現(xiàn)過濾sql特殊字符的方法,以實例形式分析總結了C#針對SQL危險字符的幾種常用的過濾技巧,非常具有實用價值,需要的朋友可以參考下
    2015-11-11
  • c# 實現(xiàn)發(fā)送郵件的功能

    c# 實現(xiàn)發(fā)送郵件的功能

    這篇文章主要介紹了c# 如何實現(xiàn)發(fā)送郵件的功能,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • c# 獲得當前絕對路徑的方法(超簡單)

    c# 獲得當前絕對路徑的方法(超簡單)

    下面小編就為大家分享一篇c# 獲得當前絕對路徑的方法(超簡單),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • C#和JavaScript實現(xiàn)交互的方法

    C#和JavaScript實現(xiàn)交互的方法

    最近做一個小項目不可避免的需要前端腳本與后臺進行交互。由于是在asp.net中實現(xiàn),故問題演化成asp.net中jiavascript與后臺c#如何進行交互。
    2015-05-05
  • DevExpress實現(xiàn)GridControl列頭繪制Checkbox的方法

    DevExpress實現(xiàn)GridControl列頭繪制Checkbox的方法

    這篇文章主要介紹了DevExpress實現(xiàn)GridControl列頭繪制Checkbox的方法,需要的朋友可以參考下
    2014-08-08

最新評論