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

news/2025/3/22 17:55:21/

## 一、文件操作基础

在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.ppmy.cn/news/1581184.html

相关文章

Linux系统中安装各种常用中间件

Linux安装docker 安装docker 定制软件源 yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装最新版docker yum list docker-ce --showduplicates | sort -r…

什么是ETL

概述 ETL(Extract-Transform-Load)是一种数据集成过程,常用于数据仓库、数据分析、数据清洗等场景。ETL的主要目标是从不同数据源提取数据,进行清洗、转换,然后加载到目标数据仓库或分析系统。 ETL所描述的过程&…

【Leetcode 每日一题】2680. 最大或值

问题背景 给你一个下标从 0 0 0 开始长度为 n n n 的整数数组 n u m s nums nums 和一个整数 k k k。每一次操作中,你可以选择一个数并将它乘 2 2 2。 你最多可以进行 k k k 次操作,请你返回 n u m s [ 0 ] ∣ n u m s [ 1 ] ∣ . . . ∣ n u m …

Prometheus Exporter系列-Postgres_Exporter一键部署

这是postgresql exporter的一件安装&#xff0c;经测试可以稳定运行&#xff0c;重新运行会删除旧exporter相关信息创建新的 #!/bin/bash# PostgreSQL Exporter 一键安装脚本&#xff08;最终版&#xff09; # 使用方法: ./pg_exporter_setup.sh <导出端口>set -e# 版本…

DeepSeek写打台球手机小游戏

DeepSeek写打台球手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端打台球小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 有白球和其他颜色的球&am…

天翼云:Apache Doris + Iceberg 超大规模湖仓一体实践

导读&#xff1a;天翼云基于 Apache Doris 成功落地项目已超 20 个&#xff0c;整体集群规模超 50 套&#xff0c;部署节点超 3000 个&#xff0c;存储容量超 15PB。天翼云基于 Apache Doris 和 Apache Iceberg 构建的湖仓一体方案&#xff0c;兼具灵活性、高性能和低成本优势&…

PageHelper插件依赖引入不报错,但用不了

情况: 父模块pom. Xml 引入1. 4. 0以上版本的pagehelper-spring-boot-starter。 要用到插件的子模块&#xff0c;去掉版本号&#xff0c;引入和父模块一样的依赖。 引入成功&#xff0c;没有报错&#xff0c;但是打开右边的maven里面没有找到PageHelper插件。 终端清空并重…

【C++指南】内存管理完全手册:new/delete

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C内存管理的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享…