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

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

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

前言

文件是存儲在磁盤中的具有特定名稱和目錄路徑的數(shù)據(jù)集合,當我們使用程序?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:打開一個已有的文件,并將光標放置在文件的末尾。如果文件不存在,則創(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)閉前拒絕共享當前文件,打開該文件的任何請求(由此進程或另一進程發(fā)出的請求)都將失敗;
  • Read:允許隨后打開文件讀取,如果未指定此標志,則文件關(guān)閉前,任何打開該文件以進行讀取的請求都將失敗,需要注意的是,即使指定了此標志,仍需要附加權(quán)限才能夠訪問該文件;
  • ReadWrite:允許隨后打開文件讀取或?qū)懭?,如果未指定此標志,則文件關(guān)閉前,任何打開該文件以進行讀取或?qū)懭氲恼埱蠖紝⑹。枰⒁獾氖?,即使指定了此標志,仍需要附加?quán)限才能夠訪問該文件;
  • Write:允許隨后打開文件寫入,如果未指定此標志,則文件關(guān)閉前,任何打開該文件以進行寫入的請求都將失敗,需要注意的是,即使指定了此標志,仍可能需要附加權(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)閉當前流并釋放與之關(guān)聯(lián)的所有資源(如套接字和文件句柄)
CopyTo(Stream)從當前流中讀取字節(jié)并將其寫入到另一流中
Dispose()釋放由 Stream 使用的所有資源
Equals(Object)判斷指定對象是否等于當前對象
Finalize()確保垃圾回收器回收 FileStream 時釋放資源并執(zhí)行其他清理操作
Flush()清除此流的緩沖區(qū),使得所有緩沖數(shù)據(jù)都寫入到文件中
GetHashCode()默認哈希函數(shù)
GetType()獲取當前實例的 Type
Lock(Int64, Int64)防止其他進程讀取或?qū)懭?FileStream
Read(Byte[], Int32, Int32)從流中讀取字節(jié)塊并將該數(shù)據(jù)寫入給定緩沖區(qū)中
ReadByte()從文件中讀取一個字節(jié),并將讀取位置提升一個字節(jié)
ToString()返回表示當前對象的字符串
Unlock(Int64, Int64)允許其他進程訪問以前鎖定的某個文件的全部或部分
Write(Byte[], Int32, Int32)將字節(jié)塊寫入文件流
WriteByte(Byte)將一個字節(jié)寫入文件流中的當前位置

【示例】使用 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)閉當前的 StreamWriter 對象和基礎(chǔ)流
public override void Flush()清理當前所有的緩沖區(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ù)所使用的編碼和從流中讀取的特定字符,將流的當前位置前移
public virtual bool ReadBoolean()從當前流中讀取一個布爾值,并將流的當前位置前移一個字節(jié)
public virtual byte ReadByte()從當前流中讀取下一個字節(jié),并將流的當前位置前移一個字節(jié)
public virtual byte[] ReadBytes(int count)從當前流中讀取指定數(shù)目的字節(jié)到一個字節(jié)數(shù)組中,并將流的當前位置前移指定數(shù)目的字節(jié)
public virtual char ReadChar()從當前流中讀取下一個字節(jié),并把流的當前位置按照所使用的編碼和從流中讀取的指定的字符往前移
public virtual char[] ReadChars(int count)從當前流中讀取指定數(shù)目的字符,并以字符數(shù)組的形式返回數(shù)據(jù),并把流的當前位置按照所使用的編碼和從流中讀取的指定的字符往前移
public virtual double ReadDouble()從當前流中讀取一個 8 字節(jié)浮點值,并把流的當前位置前移八個字節(jié)
public virtual int ReadInt32()從當前流中讀取一個 4 字節(jié)有符號整數(shù),并把流的當前位置前移四個字節(jié)
public virtual string ReadString()從當前流中讀取一個字符串,字符串以長度作為前綴,同時編碼為一個七位的整數(shù)

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

2) BinaryWriter 類

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

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

完整的方法列表請查閱官方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)軟件防破解和防調(diào)試的幾種有效措施

    C#實現(xiàn)軟件防破解和防調(diào)試的幾種有效措施

    軟件保護在現(xiàn)代應(yīng)用程序開發(fā)中變得越來越重要,尤其是在面對軟件盜版、調(diào)試和破解等問題時,在C#開發(fā)中,雖然沒有完全防止破解的辦法,但通過采取一些有效的防護措施,可以顯著增加破解的難度并保護軟件的知識產(chǎn)權(quán),本篇文章將探討在C#中實現(xiàn)軟件防破解和防調(diào)試的幾種常見技術(shù)
    2025-03-03
  • C# 如何調(diào)用C++ dll string類型返回

    C# 如何調(diào)用C++ dll string類型返回

    這篇文章主要介紹了C# 如何調(diào)用C++ dll string類型返回問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C#實現(xiàn)SHP文件讀取與地圖顯示的完整教程

    C#實現(xiàn)SHP文件讀取與地圖顯示的完整教程

    在地理信息系統(tǒng)(GIS)開發(fā)中,SHP文件是一種常見的矢量數(shù)據(jù)格式,本文將詳細介紹如何使用C#讀取SHP文件并實現(xiàn)地圖顯示功能,包括坐標轉(zhuǎn)換、圖形渲染、平移縮放操作以及屬性表展示,需要的朋友可以參考下
    2025-09-09
  • 基于C#實現(xiàn)的仿QQ聊天工具的代碼詳解

    基于C#實現(xiàn)的仿QQ聊天工具的代碼詳解

    本文介紹了基于C#實現(xiàn)的仿QQ聊天工具的系統(tǒng)架構(gòu)設(shè)計、核心功能模塊、數(shù)據(jù)庫設(shè)計、通信協(xié)議、界面實現(xiàn)、關(guān)鍵技術(shù)實現(xiàn)、部署與運維、擴展功能建議以及測試方案,需要的朋友可以參考下
    2026-02-02
  • 使用C#更改PowerPoint幻燈片大小的示例代碼

    使用C#更改PowerPoint幻燈片大小的示例代碼

    更改幻燈片大小是保持 PowerPoint 演示文稿視覺完整性的一種方式,在本文中,您將學習如何使用 Spire.Presentation for .NET 在 C# 中更改 PowerPoint 演示文稿的幻燈片大小,需要的朋友可以參考下
    2025-12-12
  • C#自定義繁體和簡體字庫實現(xiàn)中文繁體和簡體之間轉(zhuǎn)換的方法

    C#自定義繁體和簡體字庫實現(xiàn)中文繁體和簡體之間轉(zhuǎn)換的方法

    這篇文章主要介紹了C#自定義繁體和簡體字庫實現(xiàn)中文繁體和簡體之間轉(zhuǎn)換的方法,通過自定義繁簡轉(zhuǎn)換字庫實現(xiàn)繁體與簡體轉(zhuǎn)換的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • c# 使用OpenCV識別硬幣

    c# 使用OpenCV識別硬幣

    這篇文章主要介紹了c# 使用OpenCV識別硬幣的方法,幫助大家更好的利用c#進行深度學習,感興趣的朋友可以了解下
    2020-12-12
  • C#使用DES和AES實現(xiàn)加密解密功能示例

    C#使用DES和AES實現(xiàn)加密解密功能示例

    這篇文章主要介紹了C#使用DES和AES實現(xiàn)加密解密功能,結(jié)合具體實例形式分析了C#實現(xiàn)DES與AES的加密解密功能實現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06
  • C#獲取任務(wù)欄顯示進程的方法

    C#獲取任務(wù)欄顯示進程的方法

    這篇文章主要介紹了C#獲取任務(wù)欄顯示進程的方法,涉及C#針對進程操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#難點逐個擊破(5):類的訪問類型

    C#難點逐個擊破(5):類的訪問類型

    類的訪問類型有時也叫訪問級別,使用以下訪問修改符:Public、Protected、Private、internal、protected internal。
    2010-02-02

最新評論

韶山市| 新疆| 朝阳县| 尼勒克县| 民乐县| 崇仁县| 天镇县| 高淳县| 蒙城县| 宁国市| 安徽省| 特克斯县| 丰原市| 霸州市| 中宁县| 枞阳县| 商城县| 万全县| 涞水县| 慈利县| 苏尼特右旗| 六盘水市| 彩票| 鄂州市| 宝坻区| 武隆县| 石门县| 南木林县| 九江县| 鄂托克前旗| 河间市| 定南县| 大新县| 怀仁县| 梓潼县| 西畴县| 南昌县| 光山县| 崇仁县| 利川市| 罗江县|