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

C#文件讀寫(xiě)操作詳細(xì)操作指南

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

前言

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

C# 中的 I/O 類

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

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

FileStream 類

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

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

參數(shù)說(shuō)明如下:

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

例如,我們創(chuàng)建一個(gè) FileStream 對(duì)象 F 來(lái)讀取一個(gè)名為 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é)并將其寫(xiě)入到另一流中
Dispose()釋放由 Stream 使用的所有資源
Equals(Object)判斷指定對(duì)象是否等于當(dāng)前對(duì)象
Finalize()確保垃圾回收器回收 FileStream 時(shí)釋放資源并執(zhí)行其他清理操作
Flush()清除此流的緩沖區(qū),使得所有緩沖數(shù)據(jù)都寫(xiě)入到文件中
GetHashCode()默認(rèn)哈希函數(shù)
GetType()獲取當(dāng)前實(shí)例的 Type
Lock(Int64, Int64)防止其他進(jìn)程讀取或?qū)懭?FileStream
Read(Byte[], Int32, Int32)從流中讀取字節(jié)塊并將該數(shù)據(jù)寫(xiě)入給定緩沖區(qū)中
ReadByte()從文件中讀取一個(gè)字節(jié),并將讀取位置提升一個(gè)字節(jié)
ToString()返回表示當(dāng)前對(duì)象的字符串
Unlock(Int64, Int64)允許其他進(jìn)程訪問(wèn)以前鎖定的某個(gè)文件的全部或部分
Write(Byte[], Int32, Int32)將字節(jié)塊寫(xiě)入文件流
WriteByte(Byte)將一個(gè)字節(jié)寫(xiě)入文件流中的當(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();
        }
    }
}

運(yùn)行結(jié)果:

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

C#中文本文件的讀取寫(xiě)入

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

1) StreamReader

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

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

如果想查閱完整的方法列表,可以訪問(wèn)官方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 類的對(duì)象
                StreamReader file = new StreamReader("test.txt");
                string line;
                // 從文件中讀取內(nèi)容
                while((line = file.ReadLine()) != null){
                    Console.WriteLine(line);
                }
            }catch(Exception e){
                // 展示出錯(cuò)信息
                Console.WriteLine("無(wú)法讀取文件");
                Console.WriteLine(e.Message);
            }
            Console.ReadKey();
        }
    }
}

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

2) StreamWriter

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

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

完整的方法列表請(qǐng)查閱官方API

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

using System;
using System.IO;
namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args) 
        {
            // 要寫(xiě)入文件中的數(shù)據(jù)
            string[] str = new string[]{
                "薪薪代碼",
                "你好",
                "C# 教程"
            };
            // 創(chuàng)建 StreamWriter 類的對(duì)象
            StreamWriter file = new StreamWriter("demo.txt");
            // 將數(shù)組中的數(shù)據(jù)寫(xiě)入文件
            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();
        }
    }
}

運(yùn)行結(jié)果如下:

薪薪代碼
你好
C# 教程

二進(jìn)制文件讀寫(xiě)

C# 中的 BinaryReader 和 BinaryWriter 類可以用于二進(jìn)制文件的讀寫(xiě)。

1) BinaryReader 類

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

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

完整的方法列表請(qǐng)查閱 官方API

2) BinaryWriter 類

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

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

完整的方法列表請(qǐng)查閱官方API

【示例】下面通過(guò)示例演示二進(jìn)制文件的讀取和寫(xiě)入:

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;
            }
            // 寫(xiě)入文件
            try{
                bw.Write(i);
                bw.Write(d);
                bw.Write(b);
                bw.Write(s);
            }catch (IOException e){
                Console.WriteLine(e.Message + "\n 文件寫(xiě)入失敗!");
            }
            bw.Close();
            // 讀取文件
            try{
                br = new BinaryReader(new FileStream("mydata", FileMode.Open));
            }catch (IOException e){
                Console.WriteLine(e.Message + "\n 文件打開(kāi)失??!");
                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();
        }
    }
}

運(yùn)行結(jié)果:

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

總結(jié)

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    C#中Invoke的具體使用

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

    如何使用C#讀寫(xiě)鎖ReaderWriterLockSlim

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

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

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

最新評(píng)論