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

C#文件讀寫操作詳細操作指南

 更新時間:2023年10月17日 09:14:02   作者:薪薪代碼  
這篇文章主要給大家介紹了關(guān)于C#文件讀寫操作詳細操作指南,在后端開發(fā)中使用C#語言進行文件操作是一個常見的任務(wù),文中通過代碼介紹的非常詳細,需要的朋友可以參考下

前言

文件是存儲在磁盤中的具有特定名稱和目錄路徑的數(shù)據(jù)集合,當(dāng)我們使用程序?qū)ξ募M行讀取或?qū)懭霑r,程序會將文件以數(shù)據(jù)流(簡稱流)的形式讀入內(nèi)存中。我們可以將流看作是通過通信路徑傳遞的字節(jié)序列,流主要分為輸入流和輸出流,輸入流主要用于從文件讀取數(shù)據(jù)(讀操作),輸出流主要用于向文件中寫入數(shù)據(jù)(寫操作)。

C# 中的 I/O 類

System.IO 命名空間中包含了各種用于文件操作的類,例如文件的創(chuàng)建、刪除、讀取、寫入等等。如下表中所示:

I/O 類描述
BinaryReader從二進制流中讀取原始數(shù)據(jù)
BinaryWriter以二進制格式寫入原始數(shù)據(jù)
BufferedStream臨時存儲字節(jié)流
Directory對目錄進行復(fù)制、移動、重命名、創(chuàng)建和刪除等操作
DirectoryInfo用于對目錄執(zhí)行操作
DriveInfo獲取驅(qū)動器的信息
File對文件進行操作
FileInfo用于對文件執(zhí)行操作
FileStream用于文件中任何位置的讀寫
MemoryStream用于隨機訪問存儲在內(nèi)存中的數(shù)據(jù)流
Path對路徑信息執(zhí)行操作
StreamReader用于從字節(jié)流中讀取字符
StreamWriter用于向一個流中寫入字符
StringReader用于從字符串緩沖區(qū)讀取數(shù)據(jù)
StringWriter用于向字符串緩沖區(qū)寫入數(shù)據(jù)

FileStream 類

FileStream 類在 System.IO 命名空間下,使用它可以讀取、寫入和關(guān)閉文件。創(chuàng)建 FileStream 類對象的語法格式如下所示:

FileStream <object_name> = new FileStream(<file_name>, <FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>);

參數(shù)說明如下:

  • object_name:創(chuàng)建的對象名稱;
  • file_name:文件的路徑(包含文件名在內(nèi));
  • FileMode:枚舉類型,用來設(shè)定文件的打開方式,可選值如下:
  • Append:打開一個已有的文件,并將光標(biāo)放置在文件的末尾。如果文件不存在,則創(chuàng)建文件;
  • Create:創(chuàng)建一個新的文件,如果文件已存在,則將舊文件刪除,然后創(chuàng)建新文件;
  • CreateNew:創(chuàng)建一個新的文件,如果文件已存在,則拋出異常;
  • Open:打開一個已有的文件,如果文件不存在,則拋出異常;
  • OpenOrCreate:打開一個已有的文件,如果文件不存在,則創(chuàng)建一個新的文件并打開;
  • Truncate:打開一個已有的文件,然后將文件清空(刪除原有內(nèi)容),如果文件不存在,則拋出異常。
  • FileAccess:枚舉類型,用來設(shè)置文件的存取,可選值有 Read、ReadWrite 和 Write;
  • FileShare:枚舉類型,用來設(shè)置文件的權(quán)限,可選值如下:
  • Inheritable:允許子進程繼承文件句柄,Win32 不直接支持此功能;
  • None:在文件關(guān)閉前拒絕共享當(dāng)前文件,打開該文件的任何請求(由此進程或另一進程發(fā)出的請求)都將失敗;
  • Read:允許隨后打開文件讀取,如果未指定此標(biāo)志,則文件關(guān)閉前,任何打開該文件以進行讀取的請求都將失敗,需要注意的是,即使指定了此標(biāo)志,仍需要附加權(quán)限才能夠訪問該文件;
  • ReadWrite:允許隨后打開文件讀取或?qū)懭?,如果未指定此?biāo)志,則文件關(guān)閉前,任何打開該文件以進行讀取或?qū)懭氲恼埱蠖紝⑹?,需要注意的是,即使指定了此?biāo)志,仍需要附加權(quán)限才能夠訪問該文件;
  • Write:允許隨后打開文件寫入,如果未指定此標(biāo)志,則文件關(guān)閉前,任何打開該文件以進行寫入的請求都將失敗,需要注意的是,即使指定了此標(biāo)志,仍可能需要附加權(quán)限才能夠訪問該文件;
  • Delete:允許隨后刪除文件。

例如,我們創(chuàng)建一個 FileStream 對象 F 來讀取一個名為 sample.txt 的文件,示例代碼如下所示:
FileStream F = new FileStream(“sample.txt”, FileMode.Open, FileAccess.Read, FileShare.Read);

FileStream 類中的常用方法如下所示:

方法描述
Close()關(guān)閉當(dāng)前流并釋放與之關(guān)聯(lián)的所有資源(如套接字和文件句柄)
CopyTo(Stream)從當(dāng)前流中讀取字節(jié)并將其寫入到另一流中
Dispose()釋放由 Stream 使用的所有資源
Equals(Object)判斷指定對象是否等于當(dāng)前對象
Finalize()確保垃圾回收器回收 FileStream 時釋放資源并執(zhí)行其他清理操作
Flush()清除此流的緩沖區(qū),使得所有緩沖數(shù)據(jù)都寫入到文件中
GetHashCode()默認(rèn)哈希函數(shù)
GetType()獲取當(dāng)前實例的 Type
Lock(Int64, Int64)防止其他進程讀取或?qū)懭?FileStream
Read(Byte[], Int32, Int32)從流中讀取字節(jié)塊并將該數(shù)據(jù)寫入給定緩沖區(qū)中
ReadByte()從文件中讀取一個字節(jié),并將讀取位置提升一個字節(jié)
ToString()返回表示當(dāng)前對象的字符串
Unlock(Int64, Int64)允許其他進程訪問以前鎖定的某個文件的全部或部分
Write(Byte[], Int32, Int32)將字節(jié)塊寫入文件流
WriteByte(Byte)將一個字節(jié)寫入文件流中的當(dāng)前位置

【示例】使用 FileStream 類讀取指定的文件:

using System;
using System.IO;
namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args) 
        {
            FileStream file = new FileStream("test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
            for(int i = 0; i < 20; i++){
                file.WriteByte((byte)i);
            }
            file.Position = 0;
            for(int i = 0; i < 20; i++){
                Console.Write(file.ReadByte() + " ");
            }
            file.Close();
            Console.ReadKey();
        }
    }
}

運行結(jié)果:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

C#中文本文件的讀取寫入

System.IO 命名空間下的 StreamReader 和 StreamWriter 類可以用于文本文件的數(shù)據(jù)讀寫。這些類繼承自抽象基類 Stream,Stream 類提供了對文件流讀寫的功能。

1) StreamReader

StreamReader 類繼承自抽象基類 TextReader,用來從文件中讀取一系列字符,下表列出了 StreamReader 類中一些常用的方法:

方法描述
public override void Close()關(guān)閉 StreamReader 對象和基礎(chǔ)流,并釋放任何與之相關(guān)的系統(tǒng)資源
public override int Peek()返回下一個可用的字符,但不使用它
public override int Read()從輸入流中讀取下一個字符,并把字符位置往前移一個字符

如果想查閱完整的方法列表,可以訪問官方API

【示例】使用 StreamReader 讀取指定文件的內(nèi)容,文件的內(nèi)容如下所示:

薪薪代碼
你好
C# 教程

示例代碼如下:

using System;
using System.IO;
namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args) 
        {
            try{
                // 創(chuàng)建 StreamReader 類的對象
                StreamReader file = new StreamReader("test.txt");
                string line;
                // 從文件中讀取內(nèi)容
                while((line = file.ReadLine()) != null){
                    Console.WriteLine(line);
                }
            }catch(Exception e){
                // 展示出錯信息
                Console.WriteLine("無法讀取文件");
                Console.WriteLine(e.Message);
            }
            Console.ReadKey();
        }
    }
}

運行上述代碼即可輸出文件中的內(nèi)容。

2) StreamWriter

StreamWriter 類同樣繼承自抽象類 TextWriter,用來向文件中寫入一系列字符,下表列出了 StreamWriter 類中一些常用的方法:

方法描述
public override void Close()關(guān)閉當(dāng)前的 StreamWriter 對象和基礎(chǔ)流
public override void Flush()清理當(dāng)前所有的緩沖區(qū),使所有緩沖數(shù)據(jù)寫入基礎(chǔ)流
public virtual void Write(bool value)將布爾值的文本表示形式寫入文本流
public override void Write(char value)將一個字符寫入流
public virtual void Write(decimal value)將一個小數(shù)值的文本表示形式寫入文本流
public virtual void Write(double value)將一個 8 字節(jié)浮點值的文本表示形式寫入文本流
public virtual void Write(int value)將一個 4 字節(jié)有符號整數(shù)的文本表示形式寫入文本流
public override void Write(string value)將一個字符串寫入文本流
public virtual void WriteLine()將行結(jié)束符寫入文本流

完整的方法列表請查閱官方API

【示例】向文件中寫入指定內(nèi)容。

using System;
using System.IO;
namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args) 
        {
            // 要寫入文件中的數(shù)據(jù)
            string[] str = new string[]{
                "薪薪代碼",
                "你好",
                "C# 教程"
            };
            // 創(chuàng)建 StreamWriter 類的對象
            StreamWriter file = new StreamWriter("demo.txt");
            // 將數(shù)組中的數(shù)據(jù)寫入文件
            foreach(string s in str){
                file.WriteLine(s);
            }
            file.Close();
            // 讀取文件中的內(nèi)容
            string line = "";
            StreamReader readfile = new StreamReader("demo.txt");
            while((line = readfile.ReadLine()) != null){
                Console.WriteLine(line);
            }
            readfile.Close();
            Console.ReadKey();
        }
    }
}

運行結(jié)果如下:

薪薪代碼
你好
C# 教程

二進制文件讀寫

C# 中的 BinaryReader 和 BinaryWriter 類可以用于二進制文件的讀寫。

1) BinaryReader 類

BinaryReader 類用于從文件讀取二進制數(shù)據(jù),類中的常用方法如下所示:

方法描述
public override void Close()關(guān)閉 BinaryReader 對象和基礎(chǔ)流
public virtual int Read()從基礎(chǔ)流中讀取字符,并根據(jù)所使用的編碼和從流中讀取的特定字符,將流的當(dāng)前位置前移
public virtual bool ReadBoolean()從當(dāng)前流中讀取一個布爾值,并將流的當(dāng)前位置前移一個字節(jié)
public virtual byte ReadByte()從當(dāng)前流中讀取下一個字節(jié),并將流的當(dāng)前位置前移一個字節(jié)
public virtual byte[] ReadBytes(int count)從當(dāng)前流中讀取指定數(shù)目的字節(jié)到一個字節(jié)數(shù)組中,并將流的當(dāng)前位置前移指定數(shù)目的字節(jié)
public virtual char ReadChar()從當(dāng)前流中讀取下一個字節(jié),并把流的當(dāng)前位置按照所使用的編碼和從流中讀取的指定的字符往前移
public virtual char[] ReadChars(int count)從當(dāng)前流中讀取指定數(shù)目的字符,并以字符數(shù)組的形式返回數(shù)據(jù),并把流的當(dāng)前位置按照所使用的編碼和從流中讀取的指定的字符往前移
public virtual double ReadDouble()從當(dāng)前流中讀取一個 8 字節(jié)浮點值,并把流的當(dāng)前位置前移八個字節(jié)
public virtual int ReadInt32()從當(dāng)前流中讀取一個 4 字節(jié)有符號整數(shù),并把流的當(dāng)前位置前移四個字節(jié)
public virtual string ReadString()從當(dāng)前流中讀取一個字符串,字符串以長度作為前綴,同時編碼為一個七位的整數(shù)

完整的方法列表請查閱 官方API

2) BinaryWriter 類

BinaryWriter 類用于向文件寫入二進制數(shù)據(jù),類中的常用方法如下表所示:

方法描述
public override void Close()關(guān)閉 BinaryWriter 對象和基礎(chǔ)流
public virtual void Flush()清理當(dāng)前編寫器的所有緩沖區(qū),使得所有緩沖數(shù)據(jù)寫入基礎(chǔ)設(shè)備
public virtual long Seek(int offset,SeekOrigin origin)設(shè)置當(dāng)前流中的位置
public virtual void Write(bool value)將一個字節(jié)的布爾值寫入到當(dāng)前流中,0 表示 false,1 表示 true
public virtual void Write(byte value)將一個無符號字節(jié)寫入到當(dāng)前流中,并把流的位置前移一個字節(jié)
public virtual void Write(byte[] buffer)將一個字節(jié)數(shù)組寫入到基礎(chǔ)流中
public virtual void Write(char ch)將一個 Unicode 字符寫入到當(dāng)前流中,并把流的當(dāng)前位置按照所使用的編碼和要寫入到流中的指定字符往前移
public virtual void Write(char[] chars)將一個字符數(shù)組寫入到當(dāng)前流中,并把流的當(dāng)前位置按照所使用的編碼和要寫入到流中的指定字符往前移
public virtual void Write(double value)將一個 8 字節(jié)浮點值寫入到當(dāng)前流中,并把流位置前移八個字節(jié)
public virtual void Write(int value)將一個 4 字節(jié)有符號整數(shù)寫入到當(dāng)前流中,并把流位置前移四個字節(jié)
public virtual void Write(string value)將一個有長度前綴的字符串按 BinaryWriter 的當(dāng)前編碼寫如到流中,并把流的當(dāng)前位置按照所使用的編碼和要寫入到流中的指定字符往前移

完整的方法列表請查閱官方API

【示例】下面通過示例演示二進制文件的讀取和寫入:

using System;
using System.IO;
namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args) 
        {
            BinaryWriter bw;
            BinaryReader br;
            int i = 520;
            double d = 3.14159;
            bool b = true;
            string s = "薪薪代碼";
            // 創(chuàng)建文件
            try{
                bw = new BinaryWriter(new FileStream("mydata", FileMode.Create));
            }catch (IOException e){
                Console.WriteLine(e.Message + "\n 文件創(chuàng)建失敗!");
                return;
            }
            // 寫入文件
            try{
                bw.Write(i);
                bw.Write(d);
                bw.Write(b);
                bw.Write(s);
            }catch (IOException e){
                Console.WriteLine(e.Message + "\n 文件寫入失敗!");
            }
            bw.Close();
            // 讀取文件
            try{
                br = new BinaryReader(new FileStream("mydata", FileMode.Open));
            }catch (IOException e){
                Console.WriteLine(e.Message + "\n 文件打開失??!");
                return;
            }
            try{
                i = br.ReadInt32();
                Console.WriteLine("Integer data: {0}", i);
                d = br.ReadDouble();
                Console.WriteLine("Double data: {0}", d);
                b = br.ReadBoolean();
                Console.WriteLine("Boolean data: {0}", b);
                s = br.ReadString();
                Console.WriteLine("String data: {0}", s);
            }catch (IOException e){
                Console.WriteLine(e.Message + "\n 文件讀取失??!.");
            }
            br.Close();
            Console.ReadKey();
        }
    }
}

運行結(jié)果:

Integer data: 520
Double data: 3.14159
Boolean data: True
String data:薪薪代碼

總結(jié)

到此這篇關(guān)于C#文件讀寫操作的文章就介紹到這了,更多相關(guān)C#文件讀寫操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#實現(xiàn)XML文件操作詳解

    C#實現(xiàn)XML文件操作詳解

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)XML操作文件,文中的示例代碼講解詳細,對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • .Net Winform開發(fā)筆記(一)

    .Net Winform開發(fā)筆記(一)

    理解“Windows 窗體應(yīng)用程序”項目中Program.cs文件中的main方法與傳統(tǒng)C++Console控制臺程序中的main方法的區(qū)別等等,感興趣的朋友可以了解下
    2013-01-01
  • C#使用windows服務(wù)發(fā)送郵件

    C#使用windows服務(wù)發(fā)送郵件

    這篇文章主要為大家詳細介紹了C#使用windows服務(wù)發(fā)送郵件的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • C#適用于like語句的SQL格式化函數(shù)

    C#適用于like語句的SQL格式化函數(shù)

    這篇文章主要介紹了C#適用于like語句的SQL格式化函數(shù),可實現(xiàn)對字符串進行sql格式化,并且符合like查詢的格式,非常實用,需要的朋友可以參考下
    2014-10-10
  • unity3D實現(xiàn)物體任意角度自旋轉(zhuǎn)

    unity3D實現(xiàn)物體任意角度自旋轉(zhuǎn)

    這篇文章主要為大家詳細介紹了unity3D實現(xiàn)物體任意角度自旋轉(zhuǎn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C#利用異步委托實現(xiàn)獲取線程返回值

    C#利用異步委托實現(xiàn)獲取線程返回值

    一般來說,異步委托主要用于解決 ThreadPool.QueueUserWorkItem 沒有提供獲取線程執(zhí)行完成后的返回值問題,下面我們就來學(xué)習(xí)一下C#如何利用異步委托實現(xiàn)獲取線程返回值吧
    2023-12-12
  • C#中的小數(shù)和百分?jǐn)?shù)計算與byte數(shù)組操作

    C#中的小數(shù)和百分?jǐn)?shù)計算與byte數(shù)組操作

    這篇文章介紹了C#中的小數(shù)和百分?jǐn)?shù)計算與byte數(shù)組操作,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • C#中Invoke的具體使用

    C#中Invoke的具體使用

    本文主要介紹了C#中Invoke的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • 如何使用C#讀寫鎖ReaderWriterLockSlim

    如何使用C#讀寫鎖ReaderWriterLockSlim

    這篇文章向大家介紹了讀寫鎖ReaderWriterLockSlim,其優(yōu)點就是多個線程可以同時讀取該對象,要了解更多讀寫鎖的知識,仔細閱讀下文吧
    2015-07-07
  • C#實現(xiàn)裝箱與拆箱操作簡單實例

    C#實現(xiàn)裝箱與拆箱操作簡單實例

    這篇文章主要介紹了C#實現(xiàn)裝箱與拆箱操作,對于新手理解裝箱與拆箱有一定的幫助,需要的朋友可以參考下
    2014-07-07

最新評論