【小沐学C#】C#文件读写方式汇总

文章目录

  • 1、简介
  • 2、相关类介绍
  • 3、代码示例
    • 3.1 FileStream(流文件)
    • 3.2 StreamReader / StreamWriter (文本文件)
      • 3.2.1 StreamReader
      • 3.2.2 StreamWriter
    • 3.3 BinaryReader / BinaryWriter (二进制文件)
      • 3.3.1 BinaryReader
      • 3.3.2 BinaryWriter
    • 3.4 DirectoryInfo
    • 3.5 FileInfo
    • 3.6 Directory
    • 3.7 File
    • 3.8 Exception
  • 结语

1、简介

文件读写在计算机编程中起着至关重要的作用,它允许程序通过读取和写入文件来持久化数据,实现数据的长期保存和共享。文件读写是许多应用程序的核心功能之一,无论是创建文本文件、二进制文件,还是处理配置文件、日志文件或数据库文件,文件读写都是不可或缺的部分。

System.IO 命名空间有各种不同的类,用于执行各种文件操作,如创建和删除文件、读取或写入文件,关闭文件等。

2、相关类介绍

文件流对象(FileStream)在读写字节的效率是相当高的,但是在处理其他类型的数据时会比较麻烦,所以就出现了二进制读写器(BinaryReader和BinaryWriter)和文本读写器(StreamReader和StreamWriter)来解决这一问题。

System.IO 命名空间中常用的类:
在这里插入图片描述
在这里插入图片描述

3、代码示例

3.1 FileStream(流文件)

在这里插入图片描述

  • 例子1:
using System;
using System.IO;namespace FileIOApplication
{class Program{static void Main(string[] args){FileStream fs = new FileStream("test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);for (int i = 0; i <= 100; i++){fs.WriteByte((byte)i);}fs.Position = 0;for (int i = 0; i <= 100; i++){Console.Write(fs.ReadByte() + " ");}fs.Close();Console.ReadKey();}}
}

在这里插入图片描述
在这里插入图片描述

  • 例子2:

3.2 StreamReader / StreamWriter (文本文件)

文本文件的读写。
StreamReader 和 StreamWriter 类有助于完成文本文件的读写。
这些类从抽象基类 Stream 继承,Stream 支持文件流的字节读写。

3.2.1 StreamReader

在这里插入图片描述

  • 代码例子1:
using System;
using System.IO;namespace FileApplication
{class Program{static void Main(string[] args){try{using (StreamReader sr = new StreamReader("./飞鸟集.txt")){string line;while ((line = sr.ReadLine()) != null) {Console.WriteLine(line); }}}catch (Exception e){Console.WriteLine(e.Message);}Console.ReadKey();}}
}

运行结果如下:
在这里插入图片描述
在这里插入图片描述

  • 代码例子2:
using System;
using System.IO;class Program
{static void Main(){// 打开文件并创建FileStream对象using (FileStream fileStream = new FileStream("飞鸟集.txt", FileMode.Open, FileAccess.Read)){// 读取文件内容StreamReader reader = new StreamReader(fileStream);string content = reader.ReadToEnd();Console.WriteLine(content);}}
}

在这里插入图片描述

  • 代码例子3:
using System;
using System.IO;class Program
{static void Main(){// 打开文件并创建FileStream对象using (FileStream fileStream = new FileStream("飞鸟集.txt", FileMode.Open, FileAccess.Read)){// 读取文件内容byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0){// 处理读取的数据string content = System.Text.Encoding.Default.GetString(buffer, 0, bytesRead);// string content = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);Console.Write(content);}}}
}

在这里插入图片描述

  • 代码例子4:
using System;
using System.IO;class Program
{static void Main(){// 打开文件流并创建StreamReader对象用于读取文件内容using (FileStream fs = new FileStream("example.txt", FileMode.Open, FileAccess.Read))using (StreamReader reader = new StreamReader(fs)){// 读取文件内容并输出到控制台string line;while ((line = reader.ReadLine()) != null){Console.WriteLine(line);}}}
}

3.2.2 StreamWriter

在这里插入图片描述

  • 测试代码1:
using System;
using System.IO;namespace FileApplication
{class Program{static void Main(string[] args){string[] names = new string[] { "hello", "爱看书的小沐" };// 通过 StreamWriter 类的实例化进行打开文件using (StreamWriter sw = new StreamWriter("test.txt")){foreach (string s in names){sw.WriteLine(s);}}string line = "";// 通过 StreamReader 类的实例化进行打开文件using (StreamReader sr = new StreamReader("test.txt")){while ((line = sr.ReadLine()) != null){Console.WriteLine(line);}}Console.ReadKey();}}
}

运行结果如下:
在这里插入图片描述

  • 测试代码2:
using System;
using System.IO;class Program
{static void Main(){string content = "Hello, 爱看书的小沐.";// 打开文件并创建FileStream对象using (FileStream fileStream = new FileStream("test.txt", FileMode.Create, FileAccess.Write)){// 将内容转换为字节数组byte[] buffer = System.Text.Encoding.Default.GetBytes(content);// 写入文件fileStream.Write(buffer, 0, buffer.Length);}}
}
  • 测试代码3:
using System;
using System.IO;class Program
{static void Main(){string content = "Hello, 爱看书的小沐.";// 打开文件并创建StreamWriter对象using (StreamWriter writer = new StreamWriter("test.txt")){// 写入文件writer.Write(content);}}
}
  • 测试代码4:
using System;
using System.IO;class Program
{static void Main(){// 打开文件流并创建StreamWriter对象用于写入文件内容using (FileStream fs = new FileStream("example.txt", FileMode.OpenOrCreate, FileAccess.Write))using (StreamWriter writer = new StreamWriter(fs)){// 写入文件内容writer.WriteLine("Hello, World!");writer.WriteLine("This is a sample text.");}}
}

3.3 BinaryReader / BinaryWriter (二进制文件)

BinaryReader 和 BinaryWriter 类用于二进制文件的读写。

3.3.1 BinaryReader

BinaryReader 类用于从文件读取二进制数据。
一个 BinaryReader 对象通过向它的构造函数传递 FileStream 对象而被创建。
在这里插入图片描述

3.3.2 BinaryWriter

BinaryWriter 类用于向文件写入二进制数据。
一个 BinaryWriter 对象通过向它的构造函数传递 FileStream 对象而被创建。

在这里插入图片描述

  • 代码测试1:
using System;
using System.IO;namespace BinaryFileApplication
{class Program{static void Main(string[] args){BinaryWriter bw;BinaryReader br;int i = 25;double d = 3.14157;bool b = true;string s = "爱看书的小沐";// 创建文件try{bw = new BinaryWriter(new FileStream("mydata.dat",FileMode.Create));}catch (IOException e){Console.WriteLine(e.Message + "\n Cannot create file.");return;}// 写入文件try{bw.Write(i);bw.Write(d);bw.Write(b);bw.Write(s);}catch (IOException e){Console.WriteLine(e.Message + "\n Cannot write to file.");return;}bw.Close();// 读取文件try{br = new BinaryReader(new FileStream("mydata.dat",FileMode.Open));}catch (IOException e){Console.WriteLine(e.Message + "\n Cannot open file.");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 Cannot read from file.");return;}br.Close();Console.ReadKey();}}
}

运行结果如下:
在这里插入图片描述
在这里插入图片描述

  • 代码测试2:
using System;
using System.IO;class Program
{static void Main(){string filePath = "example.bin";// 写入二进制文件using (BinaryWriter writer = new BinaryWriter(File.Open(filePath, FileMode.Create))){int intValue = 42;double doubleValue = 3.14;string stringValue = "Hello, Binary World!";writer.Write(intValue);writer.Write(doubleValue);writer.Write(stringValue);}// 读取二进制文件using (BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open))){int intValue = reader.ReadInt32();double doubleValue = reader.ReadDouble();string stringValue = reader.ReadString();Console.WriteLine($"Read values: {intValue}, {doubleValue}, {stringValue}");}}
}

3.4 DirectoryInfo

使用 DirectoryInfo 类处理目录。
DirectoryInfo 类派生自 FileSystemInfo 类。
提供了各种用于创建、移动、浏览目录和子目录的方法。
该类不能被继承。
在这里插入图片描述

3.5 FileInfo

使用 FileInfo 类处理文件。
FileInfo 类派生自 FileSystemInfo 类。
提供了用于创建、复制、删除、移动、打开文件的属性和方法,且有助于 FileStream 对象的创建。
该类不能被继承。
在这里插入图片描述

  • 测试代码1:
    显示当前目录的所有文件名,及各个文件大小。
using System;
using System.IO;namespace WindowsFileApplication
{class Program{static void Main(string[] args){// 创建一个 DirectoryInfo 对象DirectoryInfo mydir = new DirectoryInfo(@"./");// 获取当前目录中的文件以及它们的名称和大小FileInfo[] f = mydir.GetFiles();foreach (FileInfo file in f){Console.WriteLine("File Name: {0} Size: {1}",file.Name, file.Length);}Console.ReadKey();}}
}

运行结果如下:
在这里插入图片描述

3.6 Directory

在这里插入图片描述
以下示例演示如何从目录中检索所有文本文件并将其移动到新目录。 移动文件后,它们不再存在于原始目录中。

  • 代码测试:
using System;
using System.IO;namespace ConsoleApplication
{class Program{static void Main(string[] args){string sourceDirectory = @"C:\current";string archiveDirectory = @"C:\archive";try{var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt");foreach (string currentFile in txtFiles){string fileName = currentFile.Substring(sourceDirectory.Length + 1);Directory.Move(currentFile, Path.Combine(archiveDirectory, fileName));}}catch (Exception e){Console.WriteLine(e.Message);}}}
}

3.7 File

在这里插入图片描述

  • 测试代码
using System;
using System.IO;
using System.Text;class Test
{public static void Main(){string path = @".\飞鸟集.txt";// This text is added only once to the file.if (!File.Exists(path)){// Create a file to write to.string createText = "Hello and Welcome" + Environment.NewLine;File.WriteAllText(path, createText, Encoding.UTF8);}// This text is always added, making the file longer over time// if it is not deleted.string appendText = "This is extra text" + Environment.NewLine;File.AppendAllText(path, appendText, Encoding.UTF8);// Open the file to read from.string readText = File.ReadAllText(path);Console.WriteLine(readText);}
}

在这里插入图片描述

3.8 Exception

using System;
using System.IO;class Program
{static void Main(){try{// 打开文件流并创建StreamReader对象用于读取文件内容using (FileStream fs = new FileStream("example.txt", FileMode.Open, FileAccess.Read))using (StreamReader reader = new StreamReader(fs)){// 读取文件内容并输出到控制台string line;while ((line = reader.ReadLine()) != null){Console.WriteLine(line);}}}catch (FileNotFoundException ex){Console.WriteLine("文件不存在:" + ex.Message);}catch (UnauthorizedAccessException ex){Console.WriteLine("无访问权限:" + ex.Message);}catch (IOException ex){Console.WriteLine("文件读取错误:" + ex.Message);}catch (Exception ex){Console.WriteLine("其他错误:" + ex.Message);}}
}

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/536885.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FastWiki v0.1.0发布!新增超多功能

FastWiki 发布 v0.1.0 https://github.com/239573049/fast-wiki/releases/tag/v0.1.0 更新日志 兼容OpenAI接口格式删除Blazor版本UI删除useEffect,解决可能存在问题的bug修复对话可以看到所有对话Merge branch ‘master’ of https://gitee.com/hejiale010426/fast-wiki更新…

Spring Cloud项目整合Sentinel及简单使用

说明&#xff1a;Sentinel是阿里巴巴开发的微服务治理中间件&#xff0c;可用于微服之间请求的流量管控、权限控制、熔断降级等场景。本文介绍如何在Spring Cloud项目中整合Sentinel&#xff0c;以及Sentinel的简单使用。 环境 首先搭建一个简单的微服务环境&#xff0c;有以…

Redis到底是单线程还是多线程!,【工作感悟】

无论你是做 Python&#xff0c;PHP&#xff0c;JAVA&#xff0c;Go 还是 C#&#xff0c;Ruby 开发的&#xff0c;都离不开使用 Redis。 大部分程序员同学工作中都有用到 Redis&#xff0c;但是只限于会简单的使用&#xff0c;对Redis缺乏整体的认知。 无论是在大厂还是在中小…

2024年云仓酒庄:店中店增项新模式,开启葡萄酒文化新篇章

2024云仓酒庄&#xff1a;店中店增项新模式&#xff0c;开启葡萄酒文化新篇章 在葡萄酒行业蓬勃发展的今天&#xff0c;云仓酒庄以其独特的经营模式和创新思维&#xff0c;在市场中脱颖而出。2024年&#xff0c;云仓酒庄继续深化其战略布局&#xff0c;不仅在多地开设酒庄实体…

智慧路灯杆如何提升智慧城市文旅形象

今年以来&#xff0c;全国多地城市凭借本地独特物产、独特旅游环境等亮点火爆出圈&#xff0c;为城市带来显著经济增长和形象提升。文旅经济作为高附加值产业&#xff0c;具有高收益、高潜力等特点&#xff0c;还有助于推动城市经济转型和可持续发展。 推动城市文旅经济发展&am…

Linux环境(Ubuntu)上搭建MQTT服务器(EMQX )

目录 概述 1 认识EMQX 1.1 EMQX 简介 1.2 EMQX 版本类型 2 Ubuntu搭建EMQX 平台 2.1 下载和安装 2.1.1 下载 2.1.2 安装 2.2 查看运行端口 3 运行Dashboard 管理控制台 3.1 查看Ubuntu上的防火墙 3.2 运行Dashboard 管理控制台 概述 本文主要介绍EMQX 的一些内容&a…

滴滴 Flink 指标系统的架构设计与实践

毫不夸张地说&#xff0c;Flink 指标是洞察 Flink 任务健康状况的关键工具&#xff0c;它们如同 Flink 任务的眼睛一般至关重要。简而言之&#xff0c;这些指标可以被理解为滴滴数据开发平台实时运维系统的数据图谱。在实时计算领域&#xff0c;Flink 指标扮演着举足轻重的角色…

关于分布式微服务数据源加密配置以及取巧方案(含自定义加密配置)

文章目录 前言Spring Cloud 第一代1、创建config server项目并加入加解密key2、启动项目&#xff0c;进行数据加密3、实际项目中的测试server Spring Cloud Alibaba低版本架构不支持&#xff0c;取巧实现无加密配置&#xff0c;联调环境问题加密数据源配置原理探究自定义加密解…

考研C语言复习进阶(2)

目录 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 4. 函数指针 5. 函数指针数组 6. 指向函数指针数组的指针 7. 回调函数 8.三步辗转法 9. 指针和数组笔试题解析 10. 指针笔试题 指针的主题&#xff0c;我们在初级阶段的《指…

短剧在线搜索源码(全网首发)

一个非常哇塞的在线短剧搜索页面&#xff0c;接口已经对接好了&#xff0c;上传源码到服务器解压就能直接用&#xff0c;有能力的可以自己改接口自己写自己的接口 接口文档地址&#xff1a;doc.djcat.sbs 源码下载地址&#xff1a;https://pan.xunlei.com/s/VNstN8C6N3VK1a1k…

C++Qt学习——添加资源文件

目录 1、创建好了文件之后&#xff0c;在左边空白处按下CtrlN&#xff0c;创建Qt 以及Qt Resource File 2、写入名称&#xff0c;点击下一步 3、可以发现已经创建好啦。 4、点击Add Prefix 5、写上前缀&#xff0c;最好加上斜杠 6、选择提前放好的图片或者icon 7、发…

Python中的类【详谈】

零.前言&#xff1a; 本文适合对Python有浅浅了解的读者&#xff0c;并不能作为Python入门使用。 一.Python中类的属性、方法 在Python中有变量&#xff0c;有函数&#xff0c;例如下方&#xff1a; def IAmAFunction():print("I am a function")IAmVariable 25…