国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C# 流Stream詳解(1)——讀寫txt和二進制文件

這篇具有很好參考價值的文章主要介紹了C# 流Stream詳解(1)——讀寫txt和二進制文件。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【讀寫txt文件】

電腦手機上有各種各樣的文件,例如視頻文件、圖片文件、文本文件,其中讀寫txt文件是最簡單的,有多種方式,

使用StreamReader和StreamWriter

//讀取文件
string path = @"C:\example.txt"; // 文件路徑
using (StreamReader reader = new StreamReader(path))//使用using語句來確保資源被正確釋放,以避免資源泄漏
{
    string line;
    while ((line = reader.ReadLine()) != null) // 逐行讀取文件內容,每次讀取一行,讀取到末尾的時候為空
    {
        Console.WriteLine(line); // 輸出每行內容到控制臺
    }
}

//寫入文件
string path = @"C:\example.txt"; // 文件路徑
using (StreamWriter writer = new StreamWriter(path))
{
    string content = "Hello, World!"; // 要寫入文件的內容
    writer.WriteLine(content); // 寫入一行內容到文件
}

使用TextReader和TextWriter?

//讀取文件
string path = @"C:\example.txt"; // 文件路徑
using (TextReader reader = new StreamReader(path))
{
    string line;
    while ((line = reader.ReadLine()) != null) // 逐行讀取文件內容
    {
        Console.WriteLine(line); // 輸出每行內容到控制臺
    }
}

//寫入文件
string path = @"C:\example.txt"; // 文件路徑
using (TextReader reader = new StreamReader(path))
{
    string line;
    while ((line = reader.ReadLine()) != null) // 逐行讀取文件內容
    {
        Console.WriteLine(line); // 輸出每行內容到控制臺
    }
}

?使用FileStream

//讀取文件
string path = @"C:\example.txt"; // 文件路徑
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
    using (StreamReader reader = new StreamReader(fs))
    {
        string line;
        while ((line = reader.ReadLine()) != null) // 逐行讀取文件內容
        {
            Console.WriteLine(line); // 輸出每行內容到控制臺
        }
    }
}


//寫入文件
string path = @"C:\example.txt"; // 文件路徑
using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
{
    using (StreamWriter writer = new StreamWriter(fs))
    {
        string content = "Hello, World!"; // 要寫入文件的內容
        writer.WriteLine(content); // 寫入一行內容到文件
    }
}

使用File類提供的靜態(tài)方法

上面幾種方法代碼都很長,一般來說我們幾乎不會使用這些方法,使用File類提供的靜態(tài)方法更便捷一些。如果文件非常大,還是要用上面的方法讀文件,否則一次性讀進來,內存會爆。

如果期望追加寫入,還是要用上面的方法,StreamWriter的參數設置為true就好,例如StreamWriter sw = new StreamWriter(filePath, true);

//讀取文件
string path = @"C:\example.txt"; // 文件路徑
string content = File.ReadAllText(path); // 讀取整個文件內容
Console.WriteLine(content); // 輸出文件內容到控制臺

//寫入文件
string path = @"C:\example.txt"; // 文件路徑
string content = "Hello, World!"; // 要寫入文件的內容
File.WriteAllText(path, content); // 將內容寫入文件

//上面是一次性讀取寫入,得到的對象是一個非常大的string,但有時我們需要逐行處理,就要逐行讀取寫入
string path = @"C:\example.txt"; // 文件路徑
string[] lines = File.ReadAllLines(path); // 讀取所有行
foreach (string line in lines)
{
    Console.WriteLine(line); // 在控制臺輸出每一行
}

string path = @"C:\example.txt"; // 文件路徑
string[] lines = { "第一行內容", "第二行內容", "第三行內容" }; // 字符串數組,每個元素將成為一行
File.WriteAllLines(path, lines); // 將字符串數組中的所有元素寫入到文件中

文本編碼

如果讀出來的內容是亂碼,建議了解文本編碼,在讀取和寫入文本時都可以傳遞文本編碼參數。

【讀寫二進制文件】?

使用BinaryWriter和BinaryReader

我們知道在磁盤上只會存儲二進制數據,文本文件最后也會被保存為二進制文件,我們調用接口讀取和寫入時雖然用的是string,但到底層一定是byte[]。這就涉及到string到byte[]的編碼和byte[]到string的解碼,只不過對于文本文件而言,有確定的編碼解碼規(guī)則,我們不需要關心。

而讀寫二進制文件,需要你自己設置編碼解碼規(guī)則。編碼解碼的類型不止是string,可能是各種類型的。

//寫入文件
using (BinaryWriter writer = new BinaryWriter(File.Open("file.bytes", FileMode.Create)))
{    
    bool boolValue = true;
    writer.Write(boolValue);

    int intValue = 123;
    writer.Write(intValue);

    float floatValue = 3.14f;
    writer.Write(floatValue);

    double doubleValue = 3.1415926;
    writer.Write(doubleValue);

    char charValue = 'A';
    writer.Write(charValue);

    string content = "永恒之星";
    byte[] bytes = Encoding.UTF8.GetBytes(content);
    writer.Write(bytes.Length); // 寫入字符串長度
    writer.Write(bytes); // 寫入字符串字節(jié)數組
}

?讀取文件時按照寫入的順序一個個讀取即可。

//讀取文件
        using (BinaryReader reader = new BinaryReader(File.Open("file.bytes", FileMode.Open)))
        {
            bool boolValue = reader.ReadBoolean();
            Debug.Log(boolValue);

            int intValue = reader.ReadInt32();
            Debug.Log(intValue);

            float floatValue = reader.ReadSingle();
            Debug.Log(floatValue);

            double doubleValue = reader.ReadDouble();
            Debug.Log(doubleValue);

            char charValue = reader.ReadChar();
            Debug.Log(charValue);

            int length = reader.ReadInt32();
            byte[] bytes = reader.ReadBytes(length);
            string content = Encoding.UTF8.GetString(bytes);
            Debug.Log(content);
        }

使用MemoryStream

上面的問題在于是一次次讀寫的,會有多次IO開銷,可以借助MemoryStream將文件內容先一次性讀寫到內存中,然后再讀寫到磁盤中。

另外,我們讀寫數據時是一行行代碼讀寫的,如果有一萬個數據,當然不可能寫一萬行代碼,所以對同類型的數據需要將數據個數也寫入,用for循環(huán)減少代碼量。

        //寫入文件
        using (MemoryStream ms = new MemoryStream())
        {
            using (BinaryWriter writer = new BinaryWriter(ms))
            {

                bool boolValue = true;
                writer.Write(boolValue);

                int count = 5;
                writer.Write(count);
                for (int i = 0; i < count; i++)
                {
                    int intValue = 123;
                    writer.Write(intValue);
                }

                float floatValue = 3.14f;
                writer.Write(floatValue);

                double doubleValue = 3.1415926;
                writer.Write(doubleValue);

                char charValue = 'A';
                writer.Write(charValue);

                string content = "永恒之星";
                byte[] bytes = Encoding.UTF8.GetBytes(content);
                writer.Write(bytes.Length); // 寫入字符串長度
                writer.Write(bytes); // 寫入字符串字節(jié)數組
            }
            File.WriteAllBytes("file.bytes", ms.ToArray());//一次性寫入磁盤
        }

        //讀取文件
        using (MemoryStream ms = new MemoryStream(File.ReadAllBytes("file.bytes")))//一次性從磁盤讀取數據
        {
            using (BinaryReader reader = new BinaryReader(ms))
            {
                bool boolValue = reader.ReadBoolean();
                Debug.Log(boolValue);

                int count = reader.ReadInt32();
                for (int i = 0; i < count; i++)
                {
                    int intValue = reader.ReadInt32();
                    Debug.Log(intValue);
                }

                float floatValue = reader.ReadSingle();
                Debug.Log(floatValue);

                double doubleValue = reader.ReadDouble();
                Debug.Log(doubleValue);

                char charValue = reader.ReadChar();
                Debug.Log(charValue);

                int length = reader.ReadInt32();
                byte[] bytes = reader.ReadBytes(length);
                string content = Encoding.UTF8.GetString(bytes);
                Debug.Log(content);
            }
        }

拓展

如果我們有很多不同類型的數據需要寫到不同的二進制文件中,而且后期的數據結構還可能會修改,那么每次自己讀寫就非常繁瑣,維護成本很高。我們需要借助些序列化工具幫忙讀寫,我們只需要定義好數據結構,并填充數據即可。這些工具有BinaryFomatter、ProtoBuf、FlatBuffer,更具需求選擇合理的工具。文章來源地址http://www.zghlxwxcb.cn/news/detail-740880.html

到了這里,關于C# 流Stream詳解(1)——讀寫txt和二進制文件的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • C++文件操作基礎 讀寫文本、二進制文件 輸入輸出流 文件位置指針以及隨機存取 文件緩沖區(qū)以及流狀態(tài)

    文本文件一般以行的形式組織數據。 包含頭文件: #include fstream 類: ofstream(output file stream) ofstream 打開文件的模式(方式):類內open()成員函數參數2.參數1是文件存儲/創(chuàng)建路徑 例如:fout.open(filename,ios::app); 對于 ofstream,不管用哪種模式打開文件,如果文件不存在,都會創(chuàng)

    2024年01月25日
    瀏覽(21)
  • 【FPGA仿真】Matlab生成二進制、十六進制的txt數據以及Vivado讀取二進制、十六進制數據并將結果以txt格式保存

    在使用Vivado軟件進行Verilog程序仿真時可能需要對模塊輸入仿真的數據,因此我們需要一個產生數據的方法(二進制或者十六進制的數據),Matlab軟件是一個很好的工具,當然你也可以使用VS等工具。 以下分別給出了使用Matlab模擬產生二進制和十六進制數據的例子,例子僅供參

    2024年02月01日
    瀏覽(145)
  • 07-2_Qt 5.9 C++開發(fā)指南_二進制文件讀寫(stm和dat格式)

    07-2_Qt 5.9 C++開發(fā)指南_二進制文件讀寫(stm和dat格式)

    除了文本文件之外,其他需要按照一定的格式定義讀寫的文件都稱為二進制文件 。每種格式的二進制文件都有自己的格式定義,寫入數據時按照一定的順序寫入,讀出時也按照相應的順序讀出。例如地球物理中常用的 SEG-Y 格式文件,必須按照其標準格式要求寫入數據才符合

    2024年02月13日
    瀏覽(22)
  • C#藍牙連接及傳輸數據的三種方式(藍牙傳輸文件、二進制數據)

    C#藍牙連接及傳輸數據的三種方式(藍牙傳輸文件、二進制數據)

    ? ? ? 先下載InTheHand.Net.Personal.dll并在C#中引用,這個需要在網上下載 ? ? ?先看界面 ? ? ? ? ? ?這種方式優(yōu)點是穩(wěn)定性較強,基本無錯誤,就是偶爾需要提前藍牙配對。 ? ? ? ?這種方式直接與藍牙設備進行配對的時候會報錯,請求的地址無效,這時候需要在被檢測的藍牙

    2024年02月11日
    瀏覽(31)
  • 【嵌入式燒錄/刷寫文件】-3.1-詳解二進制Bin格式文件

    【嵌入式燒錄/刷寫文件】-3.1-詳解二進制Bin格式文件

    目錄 1 什么是bin 2 bin文件的結構 3 如何打開bin文件 3.1 使用Vector HexView工具打開 3.2 使用Notepad++工具打開 3.3 使用Binary Viewer工具打開 結尾 優(yōu)質博文推薦閱讀(單擊下方鏈接,即可跳轉): 點擊返回「《Autosar從入門到精通-實戰(zhàn)篇》總目錄」 點擊返回「《Autosar_BSW高階配置》總

    2024年02月08日
    瀏覽(85)
  • linux二進制文件分析三大工具詳解(ldd、readelf、nm)

    linux二進制文件分析三大工具詳解(ldd、readelf、nm)

    測試代碼源碼、源碼如下: 編譯命令 ldd 是 Linux 下的一個命令,用于查看可執(zhí)行文件或共享庫文件的動態(tài)鏈接庫依賴關系。通過 ldd 命令,你可以確定一個可執(zhí)行文件或共享庫文件所依賴的動態(tài)鏈接庫(也就是它們在運行時需要加載的庫文件)。 OPTIONS(可選) : ldd 命令支

    2024年02月06日
    瀏覽(23)
  • C# 顛倒二進制位

    C# 顛倒二進制位

    顛倒給定的 32 位無符號整數的二進制位。 提示: 請注意,在某些語言(如 Java)中,沒有無符號整數類型。在這種情況下,輸入和輸出都將被指定為有符號整數類型,并且不應影響您的實現,因為無論整數是有符號的還是無符號的,其內部的二進制表示形式都是相同的。 在

    2024年02月16日
    瀏覽(22)
  • C語言--文件操作詳解(2)(文本文件和二進制文件,文件讀取結束的判定,用函數進行文件的拷貝,文件緩沖區(qū))

    C語言--文件操作詳解(2)(文本文件和二進制文件,文件讀取結束的判定,用函數進行文件的拷貝,文件緩沖區(qū))

    本篇文章主要介紹了文本文件和二進制文件,文件讀取結束的判定,如何使用函數進行文件的拷貝,文件緩沖區(qū)的相關知識。 以及具有保存功能的八功能通訊錄的源碼。 據數據的組織形式,數據文件被稱為文本文件或者二進制文件。 ①數據在內存中以二進制的形式存儲,如

    2024年02月08日
    瀏覽(27)
  • C# 二進制字節(jié)流查找函數IndexOf

    /// summary? /// 報告指定的 System.Byte[] 在此實例中的第一個匹配項的索引。? /// /summary? /// param name=\\\"srcBytes\\\"被執(zhí)行查找的 System.Byte[]。/param? /// param name=\\\"searchBytes\\\"要查找的 System.Byte[]。/param? /// returns如果找到該字節(jié)數組,則為 searchBytes 的索引位置;如果未找到該字節(jié)數組,則

    2024年02月13日
    瀏覽(21)
  • 將數據轉二進制流文件,用PostMan發(fā)送二進制流請求

    將數據轉二進制流文件,用PostMan發(fā)送二進制流請求

    一、將byte數組轉二進制流文件,并保存到本地 byte [] oneshotBytes=new byte[]{78,-29,51,-125,86,-105,56,82,-94,-115,-22,-105,0,-45,-48,-114,27,13,38,45,-24,-15,-13,46,88,-90,-66,-29,52,-23,40,-2,116,2,-115,17,36,15,-84,88,-72,22,-86,41,-90,-19,-58,19,99,-4,-63,29,51,-69,117,-120,121,3,-103,-75,44,64,-58,-34,73,-22,110,-90,92,-35,-18,-128,16,-

    2024年02月15日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包