【C# 基础精讲】文件读取和写入

news2024/12/25 9:32:37

在这里插入图片描述

文件读取和写入是计算机程序中常见的操作,用于从文件中读取数据或将数据写入文件。在C#中,使用System.IO命名空间中的类来进行文件读写操作。本文将详细介绍如何在C#中进行文件读取和写入,包括读取文本文件、写入文本文件、读取二进制文件和写入二进制文件等操作。

1. 读取文本文件

要读取文本文件,可以使用StreamReader类。以下是一个读取文本文件的示例:

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        string filePath = "sample.txt";

        try
        {
            using (StreamReader reader = new StreamReader(filePath))
            {
                string content = reader.ReadToEnd();
                Console.WriteLine("文件内容:");
                Console.WriteLine(content);
            }
        }
        catch (FileNotFoundException)
        {
            Console.WriteLine("文件不存在:" + filePath);
        }
        catch (Exception ex)
        {
            Console.WriteLine("发生异常:" + ex.Message);
        }
    }
}

在上述示例中,我们使用StreamReader打开文件并使用ReadToEnd方法读取整个文件内容。通过using语句,确保在使用完StreamReader后自动释放资源。

2. 写入文本文件

要写入文本文件,可以使用StreamWriter类。以下是一个写入文本文件的示例:

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        string filePath = "output.txt";

        try
        {
            using (StreamWriter writer = new StreamWriter(filePath))
            {
                writer.WriteLine("Hello, world!");
                writer.WriteLine("This is a line of text.");
            }

            Console.WriteLine("文件写入成功:" + filePath);
        }
        catch (Exception ex)
        {
            Console.WriteLine("发生异常:" + ex.Message);
        }
    }
}

在上述示例中,我们使用StreamWriter打开文件并使用WriteLine方法写入文本。同样,通过using语句,确保在使用完StreamWriter后自动释放资源。

3. 读取二进制文件

要读取二进制文件,可以使用BinaryReader类。以下是一个读取二进制文件的示例:

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        string filePath = "binary.dat";

        try
        {
            using (BinaryReader reader = new BinaryReader(File.OpenRead(filePath)))
            {
                int intValue = reader.ReadInt32();
                double doubleValue = reader.ReadDouble();

                Console.WriteLine("整数值:" + intValue);
                Console.WriteLine("双精度值:" + doubleValue);
            }
        }
        catch (FileNotFoundException)
        {
            Console.WriteLine("文件不存在:" + filePath);
        }
        catch (Exception ex)
        {
            Console.WriteLine("发生异常:" + ex.Message);
        }
    }
}

在上述示例中,我们使用BinaryReader读取二进制文件中的整数和双精度值。

4. 写入二进制文件

要写入二进制文件,可以使用BinaryWriter类。以下是一个写入二进制文件的示例:

using System;
using System.IO;

class Program
{
    static void Main(string[] args)
    {
        string filePath = "binary_output.dat";

        try
        {
            using (BinaryWriter writer = new BinaryWriter(File.OpenWrite(filePath)))
            {
                int intValue = 42;
                double doubleValue = 3.14159;

                writer.Write(intValue);
                writer.Write(doubleValue);
            }

            Console.WriteLine("二进制文件写入成功:" + filePath);
        }
        catch (Exception ex)
        {
            Console.WriteLine("发生异常:" + ex.Message);
        }
    }
}

在上述示例中,我们使用BinaryWriter写入整数和双精度值到二进制文件。

5. 文件读写的注意事项

  • 在进行文件读写操作时,始终确保正确地处理异常。文件可能不存在、无法访问或者发生其他问题,您应该能够适当地捕获并处理这些异常。

  • 在使用StreamReaderStreamWriter时,使用using语句来自动释放资源。这有助于防止资源泄漏。

  • 对于二进制文件的读写,要确保按照相同的顺序和格式读写数据。不同的数据类型可能占用不同的字节数,需要保持一致。

6. 总结

文件读取和写入是C#中常见的操作,用于从文件中读取数据或将数据写入文件。通过System.IO命名空间中的类,您可以轻松实现文本文件和二进制文件的读写操作。无论是读取文本文件、写入文本文件,还是读取二进制文件、写入二进制文件,都需要注意异常处理、资源释放以及数据格式的一致性。通过掌握文件读写技巧,您可以更好地处理和管理文件数据,从而提高程序的灵活性和功能。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis动态SQL:打造灵活可变的数据库操作

目录 if标签trim标签where标签set标签foreach标签 动态SQL就是根据不同的条件或需求动态地生成查询语句,比如动态搜索条件、动态表或列名、动态排序等。 if标签 在我们填写一些信息时,有些信息是必填字段,有的则是非必填的,这些…

Docker版TDengine2.6升级到Tdengine3.0

此升级性质为导入导出操作 2.6版本操作步棸 进入docker容器 docker exec -it a5f88c26119d bash 查找taosdump文件路径 find -name /taosdump 进入taosdump外层文件夹中,执行导出命令 ./taosdump -o /root -D power -T 4 实际导出命令可根据个人需求查到官方文档…

Spring Boot中使用validator如何实现接口入参自动检验

文章目录 一、背景二、使用三、举例 一、背景 在项目开发过程中,经常会对一些字段进行校验,比如字段的非空校验、字段的长度校验等,如果在每个需要的地方写一堆if else 会让你的代码变的冗余笨重且相对不好维护,如何更加规范和优…

【经典排序】—— “希尔排序”

插入排序希尔排序插入排序VS希尔排序 测试 希尔排序是在插入排序的基础上进行改进优化,所以学习希尔排序之前需要先了解插入排序。 插入排序 像玩扑克牌摸牌时一样,一张一张摸,每摸到一张插入到对应的位置,插入排序就是从第一个位…

最强自动化测试框架Playwright(33)-Route类拦截修改请求

在Playwright中,Route类用于捕获和修改请求和响应。它允许您拦截和处理特定的网络请求,以模拟不同的行为或进行自定义操作。 您可以使用page.route()方法创建Route对象,并指定要拦截的请求URL或使用正则表达式进行匹配。 一旦创建了Route对…

hive--给表名和字段加注释

1.建表添加注释 CREATE EXTERNAL TABLE test(loc_province string comment 省份,loc_city string comment 城市,loc_district string comment 区,loc_street string comment 街道,)COMMENT 每日数据处理后的表 PARTITIONED BY (par_dt string) ROW FORMAT SERDEorg.apache.had…

SpringBoot ⽇志⽂件

日志 1. 作用2. 日志的使用3. 日志的级别4. 日志的持久化 1. 作用 日志最主要的⽤途就是排除和定位问题。 除了发现和定位问题之外,我们还可以通过⽇志实现以下功能: 记录⽤户登录⽇志,⽅便分析⽤户是正常登录还是恶意破解⽤户。记录系统的…

【Elasticsearch】spring-boot-starter-data-elasticsearch的使用以及Elasticsearch集群的连接

更多有关博主写的往期Elasticsearch文章 标题地址【ElasticSearch 集群】Linux安装ElasticSearch集群(图文解说详细版)https://masiyi.blog.csdn.net/article/details/131109454基于SpringBootElasticSearch 的Java底层框架的实现https://masiyi.blog.c…

如何在 Elasticsearch 中将矢量搜索与过滤结合起来 - Python 8.x

大型语言模型(LLM)每天都在发展,这种情况有助于语义搜索的扩展。 LLM 擅长分析文本和揭示语义相似性。 这种情况也反映在搜索引擎上,因为语义搜索引擎可以为用户提供更满意的结果。 尽管大型语言模型可以捕获语义上接近的结果&am…

zabbix整合prometheus的数据

1 zabbix安装 官方文档参考 https://www.zabbix.com/download?zabbix6.0&os_distributioncentos&os_version7&componentsproxy&dbmysql&ws https://www.zabbix.com/download?zabbix4.0&os_distributioncentos&os_version7&componentsserver…

【抖音直播小玩法】介绍

一、是什么 直播小玩法是基于抖音直播场景的新型实时互动内容。直播小玩法由开发者自主开发,接入平台并开放给抖音主播挂载使用。开发者提供创意,依托平台生态,获取收益。 介入标准: 企业开发者,暂不支持个人开发者…

8.文件存储空间管理

第四章 文件管理 8.文件存储空间管理 空闲表法:   空闲盘块表和在内存管理的动态分区分配中学习过的空闲分区表是类似的,空闲盘块表记录了每一个空闲区间的起始位置和这个空闲区间的长度这两个信息。像第一个空闲区间是0,1这两个空闲块&am…

【克罗恩病是银屑病及银屑病关节炎的因果风险因素】

克罗恩病是银屑病及银屑病关节炎的因果风险因素 ①纳入463372名欧洲人,包括12882例IBD患者、5621例银屑病患者、2063例银屑病关节炎患者;②单变量孟德尔随机化(MR)分析表明,基于遗传因素预测的IBD与较高的银屑病和银屑…

复数混频器、零中频架构和高级算法开发

文章里讲解了关于射频IQ调制器、零中频架构相关的原理及技术,全都是干货!其实好多同行对软件无线电的原理、IQ调制、镜像抑制都是一知半解,知其然不知其所以然。好好研读这篇文章,相信会让你有种恍然大悟的感觉。 RF工程常被视为…

【Selenium学习】环境搭建 API学习

目录 一、javaSelenium的环境搭建? 二、认识Selenium 1、什么是自动化? 2、什么是Selenium? (重点) 3、selenium的工作原理?(重点) 三、Selenium操作元素API(重点) 第一部分&#…

【数据结构OJ题】合并两个有序链表

原题链接:https://leetcode.cn/problems/merge-two-sorted-lists/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 可以先创建一个空链表,然后依次从两个有序链表中选取最小的进行尾插操作。(有点类似双…

【数据结构OJ题】环形链表

原题链接:https://leetcode.cn/problems/linked-list-cycle/description/ 1. 题目描述 2. 思路分析 整体思路:定义快慢指针fast,slow,如果链表确实有环,fast指针一定会在环内追上slow指针。 即慢指针一次走一步&…

分布式 | 如何搭建 DBLE 的 JVM 指标监控系统

本篇文章采用 Docker 方式搭建 Grafana Prometheus 实现对 DBLE 的 JVM 相关指标的监控系统。 作者:文韵涵 爱可生 DBLE 团队开发成员,主要负责 DBLE 需求开发,故障排查和社区问题解答。 本文来源:原创投稿 爱可生开源社区出品&a…

“开发和运维”只是一个开始,最终目标是构建高质量的软件工程

随着技术的飞速发展,软件行业不断寻求改进和创新的方法来提供更高质量的产品。在这方面,DevOps已经展现出了巨大的潜力。通过打破开发和运维之间的壁垒,DevOps将持续集成、持续交付和自动化流程引入到软件开发中,使团队能够更快地…

PSP - 开源可训练的蛋白质结构预测框架 OpenFold 的环境配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132334671 Paper: OpenFold: Retraining AlphaFold2 yields new insights into its learning mechanisms and capacity for generalization Open…