C#零基础入门篇(18. 文件操作指南)

## 一、文件操作基础

在C#中,文件操作主要通过`System.IO`命名空间中的类来实现,例如`File`、`FileStream`、`FileInfo`等。

## 二、常用文件操作方法

### (一)文件读取

1. **使用`File.ReadAllText`方法读取文件内容为字符串**
    ```
    string content = File.ReadAllText("example.txt", Encoding.UTF8);
    Console.WriteLine(content);
    ```
2. **使用`File.ReadAllLines`方法读取文件内容为字符串数组**
    ```
    string[] lines = File.ReadAllLines("example.txt", Encoding.UTF8);
    foreach (string line in lines)
    {
        Console.WriteLine(line);
    }
    ```
3. **使用`FileStream`读取文件**
    ```
    FileStream file = new FileStream("example.txt", FileMode.Open, FileAccess.Read);
    byte[] buffer = new byte[1024 * 1024 * 5]; // 每次读取5M的数据
    int bytesRead = file.Read(buffer, 0, buffer.Length);
    string str = Encoding.UTF8.GetString(buffer, 0, bytesRead);
    Console.WriteLine(str);
    file.Close();
    file.Dispose();
    ```

### (二)文件写入

1. **使用`File.WriteAllText`方法创建或覆盖文件并写入文本**
    ```
    string filePath = "example.txt";
    string textToWrite = "Hello, World!";
    File.WriteAllText(filePath, textToWrite, Encoding.UTF8);
    ```
2. **使用`File.AppendAllText`方法追加文本到文件**
    ```
    File.AppendAllText("example.txt", "追加的文本内容\n", Encoding.UTF8);
    ```
3. **使用`FileStream`写入文件**
    ```
    FileStream fileStream = File.Create("example.txt");
    byte[] content = Encoding.UTF8.GetBytes("写入内容");
    fileStream.Write(content, 0, content.Length);
    fileStream.Close();
    ```

### (三)文件创建

1. **使用`File.Create`方法创建文件**
    ```
    string filePath = @"c:\myFile.txt";
    FileStream fileStream = File.Create(filePath);
    fileStream.Close();
    ```

### (四)文件复制

1. **使用`File.Copy`方法复制文件**
    ```
    string sourceFilePath = @"c:\myFile.txt";
    string destinationFilePath = @"d:\myFile_copy.txt";
    File.Copy(sourceFilePath, destinationFilePath);
    ```

### (五)文件移动

1. **使用`File.Move`方法移动文件**
    ```
    string sourceFilePath = @"c:\myFile.txt";
    string destinationFilePath = @"d:\myFile.txt";
    File.Move(sourceFilePath, destinationFilePath);
    ```

### (六)文件删除

1. **使用`File.Delete`方法删除文件**
    ```
    string filePath = @"d:\myFile.txt";
    File.Delete(filePath);
    ```

### (七)判断文件是否存在

1. **使用`File.Exists`方法判断文件是否存在**
    ```
    bool exists = File.Exists("example.txt");
    Console.WriteLine(exists ? "文件存在" : "文件不存在");
    ```

## 三、`FileInfo`类

`FileInfo`类提供了对文件的高级操作功能,以下是一些示例:

### (一)读取文件

```
FileInfo fileInfo = new FileInfo("example.txt");
if (fileInfo.Exists)
{
    using (FileStream fs = fileInfo.OpenRead())
    {
        byte[] buffer = new byte[fs.Length];
        int bytesRead = fs.Read(buffer, 0, buffer.Length);
        Console.WriteLine($"读取了 {bytesRead} 字节的数据。");
    }
}
else
{
    Console.WriteLine("文件不存在。");
}
```

### (二)复制文件

```
FileInfo sourceFile = new FileInfo("source.txt");
string destinationPath = "destination.txt";
if (sourceFile.Exists)
{
    FileInfo copiedFile = sourceFile.CopyTo(destinationPath, false); // 不允许覆盖
    Console.WriteLine($"文件已复制到: {copiedFile.FullName}");
}
else
{
    Console.WriteLine("源文件不存在。");
}
```

## 四、注意事项

1. 在进行文件操作时,需要注意文件的路径是否正确,以及是否有足够的权限访问文件。
2. 使用`FileStream`等流操作文件时,记得在操作完成后关闭流并释放资源,可以使用`using`语句来自动管理资源。
3. 在读取或写入文件时,要注意文件的编码格式,避免出现乱码问题。

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

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

相关文章

每日一题--内存池

内存池(Memory Pool)是一种高效的内存管理技术,通过预先分配并自主管理内存块,减少频繁申请/释放内存的系统开销,提升程序性能。它是高性能编程(如游戏引擎、数据库、网络服务器)中的核心优化手…

【Linux系统】Linux进程终止的N种方式

Linux系列 文章目录 Linux系列前言一、进程终止的概念二、进程终止的场景三、进程终止的实现3.1 程序退出码3.2 运行完毕结果正常3.3 运行完毕结果异常3.4 程序异常退出 总结 前言 进程终止是操作系统中,进程的一个重要阶段,他标志着进程生命周期的结束…

正则表达式引擎深入探讨

正则表达式引擎(Regular Expression Engine)是正则表达式得以“活起来”的核心。它是一个精密的软件组件,负责接收正则表达式和输入文本,解析模式并执行匹配或替换操作,最终输出结果——可能是简单的“是否匹配”&…

java面试题,什么是动态代理?、动态代理和静态代理有什么区别?说一下反射机制?JDK Proxy 和 CGLib 有什么区别?动态代理的底层

什么是动态代理? 动态代理是在程序运行期,动态的创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术。 在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法。可以理解…

【工具类】Java的 LocalDate 获取本月第一天和最后一天

博主介绍:✌全网粉丝22W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

嵌入式开发之STM32学习笔记day06

基于STM32F103C8T6的开发实践——从入门到精通01 1. 引言 STM32系列微控制器是STMicroelectronics推出的一款高性能、低功耗的32位微控制器,广泛应用于嵌入式系统中。STM32F103C8T6是其中非常受欢迎的一款,凭借其强大的性能、丰富的外设接口和低廉的价格…

学习使用 Git 和 GitHub 开发项目的教程推荐

Git 和 GitHub 是现代软件开发中不可或缺的工具,无论你是个人开发者还是团队成员,掌握它们都能极大提升效率。本文精选了一系列优质教程资源,涵盖从基本 Git 命令到进阶多人协作的内容。这些教程既有文字形式,也有视频或交互式资源…

golang中的接口

1.简介 在go中的接口是以一种类型,一种抽象的类型。接口(interface)是一组函数method的集合,go中的接口不能包含任何变量。在go中接口中的所有方法都没有方法体,接口定义了一个对象的行为规范,只定义规范不实现。接口体现了程序的多态和高内聚低耦合的思想。go中的接口也是…

AI 浪潮下,职场的变与不变

如今,AI 如迅猛飓风,极速席卷职场,彻底搅乱了原有的秩序。你是否留意到,身边的工作方式正悄然生变?今天,【探星 AI 研习社】就为大家深入剖析,AI 如何改写职场剧本。无论你是大学生还是职场资深…

汇川EASY系列之以太网通讯(MODBUS_TCP做主站)

汇川Easy系列以太网通讯中(MODBUSTCP,plc做主站),终于可以不用使用指令就可以完成了,全程通过简单的配置就可通讯。本文将通过EASY系列PLC与调试助手之间完成此操作。具体演示如下; 关于主站和从站的介绍 A/请求:即主动方 向被动方发送的一个要求的信息。 B/主站:发…

npm error gyp info

在使用 npm 安装 Node.js 包时,可能会遇到各种错误,其中 gyp 错误是比较常见的一种。gyp 是 Node.js 的一个工具,用于编译 C 代码。这些错误通常发生在需要编译原生模块的 npm 包时。下面是一些常见的原因和解决方法: 常见原因及…

Oracle 19C分区表索引小结

一、大佬说(杨廷琨) LOCAL索引的最大好处是在进行分区操作,比如TRUNCATE PARTITION, DROP PARTITION时,不会出现索引INVALID的情况,不影响索引的可用性。由于GLOBAL索引所有的数据存储在一起,因此当执行分…

AutoHub场景演示|带您领略智能自动化操作的全新体验

AutoHub是一款由OpenCSG推出的基于前沿大型语言模型(LLM)的浏览器自动化工具,旨在通过智能对话交互和自动化技术,帮助用户更高效地浏览网页和完成任务。它不仅能够自动化繁琐的网页操作,还能够为用户提供精准的信息检索…

深入解析 Linux 声卡驱动:从架构到实战

在嵌入式 Linux 设备中,音频功能的实现离不开 Linux 声卡驱动。而 ALSA (Advanced Linux Sound Architecture) 作为 Linux 内核的音频框架,提供了一整套 API 和驱动模型,帮助开发者快速集成音频功能。本篇文章以 WM8960 音频编解码器&#xf…

thinkphp5模型查询数据库,查出来的字段直接修改成另外的名字

在ThinkPHP5中,如果你希望在查询数据库时将返回的字段名直接修改为其他名称,可以通过以下几种方式实现: 方法1:使用 field 方法指定字段别名 在查询时通过 field 方法直接为字段指定别名(使用 AS 关键字)。 示例代码: // 使用Db类查询 $result = Db::name(user)->…

关于前端指令

在前端开发中,指令(Directives)通常指在框架中使用的一种特殊的语法或机制,用于扩展 HTML 的功能。常见的指令主要存在于前端框架中,如 Vue.js、Angular 等。下面我们将分别介绍 Vue.js 和 Angular 中的常用指令&#…

虚拟地址空间(下)进程地址空间(上)

一.关于页表组成 1.权限(rwx) 作用:如1.让代码区变成只读的 2.写时拷贝的实现:子进程创建时其页表指向的父进程代码和数据权限都是只读的,子进程试图修改,触发错误,系统开始写时拷贝。 来源:…

【区块链 + 航运物流】丰溯 - 区块链溯源平台 | FISCO BCOS 应用案例

丰溯是顺丰科技推出的区块链溯源平台, 采用 FISCO BCOS 底层开源框架, 为农副食品、 冷链生鲜等企业客户及消费 者提供关键流通节点的溯源信息服务,形成从源头到消费者端全链路透明的信息链。 在商贸消费领域, 溯源一直是保障产品…

iwebsec-SQL数字型注入

1.判断是否存在漏洞 添加and 11发现正常显示,添加and 12无回显条目,则存在sql注入漏洞 2.因为有回显,尝试union联合注入,使用order by判断出有3个字段 3.使用union联合注入查看回显位,发现3三个字段均有回显&#xff…

蓝桥杯每日五题第一日

蓝桥杯每日5题 问题一 班级活动 1.班级活动 - 蓝桥云课 问题描述 小明的老师准备组织一次班级活动。班上一共有 nn 名 (nn 为偶数) 同学,老师想把所有的同学进行分组,每两名同学一组。为了公平,老师给每名同学随机分配了一个 nn 以内的正…