C#文件读写操作 [详细]

这篇具有很好参考价值的文章主要介绍了C#文件读写操作 [详细]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文件是存储在磁盘中的具有特定名称和目录路径的数据集合,当我们使用程序对文件进行读取或写入时,程序会将文件以数据流(简称流)的形式读入内存中。我们可以将流看作是通过通信路径传递的字节序列,流主要分为输入流和输出流,输入流主要用于从文件读取数据(读操作),输出流主要用于向文件中写入数据(写操作)。

C# 中的 I/O 类

System.IO 命名空间中包含了各种用于文件操作的类,例如文件的创建、删除、读取、写入等等。如下表中所示:

I/O 类 描述
BinaryReader 从二进制流中读取原始数据
BinaryWriter 以二进制格式写入原始数据
BufferedStream 临时存储字节流
Directory 对目录进行复制、移动、重命名、创建和删除等操作
DirectoryInfo 用于对目录执行操作
DriveInfo 获取驱动器的信息
File 对文件进行操作
FileInfo 用于对文件执行操作
FileStream 用于文件中任何位置的读写
MemoryStream 用于随机访问存储在内存中的数据流
Path 对路径信息执行操作
StreamReader 用于从字节流中读取字符
StreamWriter 用于向一个流中写入字符
StringReader 用于从字符串缓冲区读取数据
StringWriter 用于向字符串缓冲区写入数据

FileStream 类

FileStream 类在 System.IO 命名空间下,使用它可以读取、写入和关闭文件。创建 FileStream 类对象的语法格式如下所示:

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

参数说明如下:
object_name:创建的对象名称;

file_name:文件的路径(包含文件名在内);

FileMode:枚举类型,用来设定文件的打开方式,可选值如下:

Append:打开一个已有的文件,并将光标放置在文件的末尾。如果文件不存在,则创建文件;

Create:创建一个新的文件,如果文件已存在,则将旧文件删除,然后创建新文件;

CreateNew:创建一个新的文件,如果文件已存在,则抛出异常;

Open:打开一个已有的文件,如果文件不存在,则抛出异常;

OpenOrCreate:打开一个已有的文件,如果文件不存在,则创建一个新的文件并打开;

Truncate:打开一个已有的文件,然后将文件清空(删除原有内容),如果文件不存在,则抛出异常。

FileAccess:枚举类型,用来设置文件的存取,可选值有 Read、ReadWrite 和 Write;

FileShare:枚举类型,用来设置文件的权限,可选值如下:

Inheritable:允许子进程继承文件句柄,Win32 不直接支持此功能;

None:在文件关闭前拒绝共享当前文件,打开该文件的任何请求(由此进程或另一进程发出的请求)都将失败;

Read:允许随后打开文件读取,如果未指定此标志,则文件关闭前,任何打开该文件以进行读取的请求都将失败,需要注意的是,即使指定了此标志,仍需要附加权限才能够访问该文件;

ReadWrite:允许随后打开文件读取或写入,如果未指定此标志,则文件关闭前,任何打开该文件以进行读取或写入的请求都将失败,需要注意的是,即使指定了此标志,仍需要附加权限才能够访问该文件;

Write:允许随后打开文件写入,如果未指定此标志,则文件关闭前,任何打开该文件以进行写入的请求都将失败,需要注意的是,即使指定了此标志,仍可能需要附加权限才能够访问该文件;

Delete:允许随后删除文件。

例如,我们创建一个 FileStream 对象 F 来读取一个名为 sample.txt 的文件,示例代码如下所示:
FileStream F = new FileStream(“sample.txt”, FileMode.Open, FileAccess.Read, FileShare.Read);

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

方法 描述
Close() 关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)
CopyTo(Stream) 从当前流中读取字节并将其写入到另一流中
Dispose() 释放由 Stream 使用的所有资源
Equals(Object) 判断指定对象是否等于当前对象
Finalize() 确保垃圾回收器回收 FileStream 时释放资源并执行其他清理操作
Flush() 清除此流的缓冲区,使得所有缓冲数据都写入到文件中
GetHashCode() 默认哈希函数
GetType() 获取当前实例的 Type
Lock(Int64, Int64) 防止其他进程读取或写入 FileStream
Read(Byte[], Int32, Int32) 从流中读取字节块并将该数据写入给定缓冲区中
ReadByte() 从文件中读取一个字节,并将读取位置提升一个字节
ToString() 返回表示当前对象的字符串
Unlock(Int64, Int64) 允许其他进程访问以前锁定的某个文件的全部或部分
Write(Byte[], Int32, Int32) 将字节块写入文件流
WriteByte(Byte) 将一个字节写入文件流中的当前位置

【示例】使用 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();
        }
    }
}

运行结果:

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 类可以用于文本文件的数据读写。这些类继承自抽象基类 Stream,Stream 类提供了对文件流读写的功能。

1) StreamReader

StreamReader 类继承自抽象基类 TextReader,用来从文件中读取一系列字符,下表列出了 StreamReader 类中一些常用的方法:

方法 描述
public override void Close() 关闭 StreamReader 对象和基础流,并释放任何与之相关的系统资源
public override int Peek() 返回下一个可用的字符,但不使用它
public override int Read() 从输入流中读取下一个字符,并把字符位置往前移一个字符

如果想查阅完整的方法列表,可以访问官方API

【示例】使用 StreamReader 读取指定文件的内容,文件的内容如下所示:

薪薪代码
你好
C# 教程

示例代码如下:

using System;
using System.IO;
namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args) 
        {
            try{
                // 创建 StreamReader 类的对象
                StreamReader file = new StreamReader("test.txt");
                string line;
                // 从文件中读取内容
                while((line = file.ReadLine()) != null){
                    Console.WriteLine(line);
                }
            }catch(Exception e){
                // 展示出错信息
                Console.WriteLine("无法读取文件");
                Console.WriteLine(e.Message);
            }
            Console.ReadKey();
        }
    }
}

运行上述代码即可输出文件中的内容。

2) StreamWriter

StreamWriter 类同样继承自抽象类 TextWriter,用来向文件中写入一系列字符,下表列出了 StreamWriter 类中一些常用的方法:

方法 描述
public override void Close() 关闭当前的 StreamWriter 对象和基础流
public override void Flush() 清理当前所有的缓冲区,使所有缓冲数据写入基础流
public virtual void Write(bool value) 将布尔值的文本表示形式写入文本流
public override void Write(char value) 将一个字符写入流
public virtual void Write(decimal value) 将一个小数值的文本表示形式写入文本流
public virtual void Write(double value) 将一个 8 字节浮点值的文本表示形式写入文本流
public virtual void Write(int value) 将一个 4 字节有符号整数的文本表示形式写入文本流
public override void Write(string value) 将一个字符串写入文本流
public virtual void WriteLine() 将行结束符写入文本流

完整的方法列表请查阅官方API

【示例】向文件中写入指定内容。

using System;
using System.IO;
namespace c.biancheng.net
{
    class Demo
    {
        static void Main(string[] args) 
        {
            // 要写入文件中的数据
            string[] str = new string[]{
                "薪薪代码",
                "你好",
                "C# 教程"
            };
            // 创建 StreamWriter 类的对象
            StreamWriter file = new StreamWriter("demo.txt");
            // 将数组中的数据写入文件
            foreach(string s in str){
                file.WriteLine(s);
            }
            file.Close();
            // 读取文件中的内容
            string line = "";
            StreamReader readfile = new StreamReader("demo.txt");
            while((line = readfile.ReadLine()) != null){
                Console.WriteLine(line);
            }
            readfile.Close();
            Console.ReadKey();
        }
    }
}

运行结果如下:

薪薪代码
你好
C# 教程

二进制文件读写

C# 中的 BinaryReader 和 BinaryWriter 类可以用于二进制文件的读写。

1) BinaryReader 类

BinaryReader 类用于从文件读取二进制数据,类中的常用方法如下所示:

方法 描述
public override void Close() 关闭 BinaryReader 对象和基础流
public virtual int Read() 从基础流中读取字符,并根据所使用的编码和从流中读取的特定字符,将流的当前位置前移
public virtual bool ReadBoolean() 从当前流中读取一个布尔值,并将流的当前位置前移一个字节
public virtual byte ReadByte() 从当前流中读取下一个字节,并将流的当前位置前移一个字节
public virtual byte[] ReadBytes(int count) 从当前流中读取指定数目的字节到一个字节数组中,并将流的当前位置前移指定数目的字节
public virtual char ReadChar() 从当前流中读取下一个字节,并把流的当前位置按照所使用的编码和从流中读取的指定的字符往前移
public virtual char[] ReadChars(int count) 从当前流中读取指定数目的字符,并以字符数组的形式返回数据,并把流的当前位置按照所使用的编码和从流中读取的指定的字符往前移
public virtual double ReadDouble() 从当前流中读取一个 8 字节浮点值,并把流的当前位置前移八个字节
public virtual int ReadInt32() 从当前流中读取一个 4 字节有符号整数,并把流的当前位置前移四个字节
public virtual string ReadString() 从当前流中读取一个字符串,字符串以长度作为前缀,同时编码为一个七位的整数

完整的方法列表请查阅 官方API

2) BinaryWriter 类

BinaryWriter 类用于向文件写入二进制数据,类中的常用方法如下表所示:

方法 描述
public override void Close() 关闭 BinaryWriter 对象和基础流
public virtual void Flush() 清理当前编写器的所有缓冲区,使得所有缓冲数据写入基础设备
public virtual long Seek(int offset,SeekOrigin origin) 设置当前流中的位置
public virtual void Write(bool value) 将一个字节的布尔值写入到当前流中,0 表示 false,1 表示 true
public virtual void Write(byte value) 将一个无符号字节写入到当前流中,并把流的位置前移一个字节
public virtual void Write(byte[] buffer) 将一个字节数组写入到基础流中
public virtual void Write(char ch) 将一个 Unicode 字符写入到当前流中,并把流的当前位置按照所使用的编码和要写入到流中的指定字符往前移
public virtual void Write(char[] chars) 将一个字符数组写入到当前流中,并把流的当前位置按照所使用的编码和要写入到流中的指定字符往前移
public virtual void Write(double value) 将一个 8 字节浮点值写入到当前流中,并把流位置前移八个字节
public virtual void Write(int value) 将一个 4 字节有符号整数写入到当前流中,并把流位置前移四个字节
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 = "薪薪代码";
            // 创建文件
            try{
                bw = new BinaryWriter(new FileStream("mydata", FileMode.Create));
            }catch (IOException e){
                Console.WriteLine(e.Message + "\n 文件创建失败!");
                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();
        }
    }
}

运行结果:文章来源地址https://www.toymoban.com/news/detail-792924.html

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

到了这里,关于C#文件读写操作 [详细]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言如何使用文件读写来处理文件操作?

    首先,让我们来谈谈文件读写,这听起来有点像一个神秘的活动,就像你是一个特工在阅读和修改机密文件一样!所以,假设你是一个特工小鱼,正在进行秘密任务。 首先,你需要给自己起一个特工代号。我们先把你叫做Agent007。接下来,你需要打开一个目标文件,就像你发

    2024年02月12日
    浏览(38)
  • 【c语言】二进制文件的读写操作

    创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡𖥦)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c语言系列专栏:c语言之路重点知识整合 🔥 给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ 本文基

    2024年02月12日
    浏览(31)
  • 【Java 编程】文件操作,文件内容的读写—数据流

    平时说的文件一般都是指存储在 硬盘 上的普通文件 形如 txt, jpg, mp4, rar 等这些文件都可以认为是普通文件,它们都是在硬盘上存储的 在计算机中,文件可能是一个 广义的概念 ,就不只是包含普通文件,还可以包含 目录 (把目录称为目录文件) 操作系统中,还会使用文件来描

    2023年04月08日
    浏览(37)
  • Java 中如何实现文件的读写操作?(十六)

    在Java中,文件I/O(输入/输出)操作是一项非常基础的任务。在Java中,可以使用File和FileInputStream、FileOutputStream、BufferedReader、PrintWriter等类来进行文件读写操作。 文件读取 在Java中,可以使用FileInputStream和BufferedReader类来读取文件。 FileInputStream: FileInputStream是一个用于从文件

    2024年02月02日
    浏览(27)
  • Java IO:文件读写、流操作与常用技巧

    Java IO流指的是Java输入输出流,用于处理与文件、网络等设备之间的数据传输。Java提供了 InputStream 和 OutputStream 两个抽象类作为所有输入输出流类的基类,以及 Reader 和 Writer 两个抽象类作为所有 字符 输入输出流类的基类。同时,Java还提供了许多具体的输入输出流类和字符输

    2024年02月04日
    浏览(30)
  • 2.php开发-个人博客项目&文件操作类&编辑器&上传下载删除读写

    ​ ​ ​ 文件上传类: form表单上传文件 --文件上传,--php接收,处理 action ---提交给谁处理 move函数移到文件 ---文件上传漏洞啊!!! ——ueditor 实现编辑器的加载 上传文件的方法: 用了编辑器,就要用编辑器去验证了(编辑器没漏洞,那就没漏洞——他有问题就有问题,

    2024年01月21日
    浏览(36)
  • 【头歌】——数据分析与实践-基于Python语言的文件与文件夹管理-文本 文件处理-利用csv模块进行csv文件的读写操作

    第1关 创建子文件夹 第2关 删除带有只读属性的文件 第3关 批量复制文件夹中的所有文件 未通过本题,如果您通过了本题欢迎补充到评论区,有时间我会整理进来 第1关 读取宋词文件,根据词人建立多个文件 第2关 读取宋词文件,并根据词人建立多个文件夹 第3关 读取宋词文

    2024年01月25日
    浏览(48)
  • C语言文件操作(超详细)

    🍕博客主页:️自信不孤单 🍬文章专栏:C语言 🍚代码仓库:破浪晓梦 🍭欢迎关注:欢迎大家点赞收藏+关注 本文主要介绍C语言中文件操作的相关内容(例:文件读、写等相关函数)。 文件是以计算机硬盘为载体存储在计算机上的信息集合。是数据源的一种,最主要的作用

    2023年04月12日
    浏览(23)
  • 文件详细操作过程(C语言)

    🌞🌞🌞 千淘万漉虽辛苦 🌞🌞🌞 🌞🌞🌞 吹尽狂沙始到金 🌞🌞🌞 所谓“文件”一般指:存储在外部存储介质上数据的集合。操作系统是以文件为单位对数据进行管理的,如我们用word写的一篇文章、用C语言编的一个程序要保存在磁盘上都有必须以文件的形式,并且给相应

    2024年02月06日
    浏览(24)
  • 【C语言】文件操作详细讲解

    本章要分享的内容是C语言中文件操作的内容,为了方便大家学习,目录如下 目录 1.为什么要使用文件 2.什么是文件 2.1   程序文件 2.2 数据文件 2.3   文件名 3.文件的打开和关闭 3.1文件指针  3.2打开和关闭 4.文件的顺序读写 4.1顺序读写函数介绍 4.1.1   fputc 4.1.2   fgetc 4.1

    2023年04月15日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包