跳至页脚内容
Iron Academy Logo
学习 C#
学习 C#

其他类别

C# 读写文件

Tim Corey
24分34秒

C# 中的文件输入和输出 (I/O) 操作是许多软件应用程序的重要组成部分,允许开发人员高效地读取和写入文件。 无论您是存储数据、记录应用程序事件,还是处理大量文本或二进制数据,C# 都提供了强大的文件处理工具。 在 Tim Corey 的视频"C# 数据访问:文本文件"中,他详细介绍了这些文件操作,重点是如何使用文本文件进行数据存储和检索。 本文旨在总结 Tim 在视频中涉及的关键概念和技术,为您提供 C# 中文件 I/O 操作的实用见解。

简介

在 C# 中,文件输入和输出操作对于文本文件的读取和写入至关重要。 File 类提供了与现有文件交互或创建新文件的静态方法。 StreamReaderStreamWriter 常用于读取和写入文件。 StreamReader 按行读取文件,允许您访问每一行文本或字符串数组。 您也可以使用 while 循环来有效地读取较大的文件。 StreamWriter 类用于将数据写入文件,支持写入字符串和数组。 它可以用于将文本附加到现有文件或覆盖整个文件。像 WriteLineWriteText 这样的方法允许轻松地在文本文件中操作数据。

这些操作通常在 static void Main 方法中执行,在此定义文件路径。 例如,您可以指定一个文件名并使用 StreamWriter 写入单个字符串或整个字符串数组。 using 语句确保文件在操作后正确关闭,防止资源泄漏。 StreamReader 也可用于按行读取文件,并可处理异常以管理当文件不存在或无法访问的潜在错误。 这些文件 I/O 功能使 C# 成为高效处理文件的绝佳选择。

Tim 通过强调 C# 中文本文件读取和写入的简单性引入主题。 他演示了几行代码如何实现这些任务,使文本文件成为数据存储的可行选择。

创建演示控制台应用程序

Tim 首先使用 Visual Studio 创建了一个名为 "TextFileDataAccessDemo "的新控制台应用程序。

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;

namespace TextFileDataAccessDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadLine(); // Keeps the console window open to view the output
        }
    }
}
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;

namespace TextFileDataAccessDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadLine(); // Keeps the console window open to view the output
        }
    }
}

他解释了如何使用 Console.ReadLine 来保持控制台窗口打开,让用户看到输出。

读取文本文件

Tim 展示了如何使用 File.ReadAllLines 方法从文本文件中读取数据。 他展示了如何处理文件路径和使用字符串字面量来避免转义字符。

string filePath = @"C:\demos\test.txt";
List<string> lines = File.ReadAllLines(filePath).ToList();
string filePath = @"C:\demos\test.txt";
List<string> lines = File.ReadAllLines(filePath).ToList();

File.ReadAllLines 方法从指定的文件中读取所有行,并将它们作为字符串数组返回。 Tim 将数组转换为列表,以便于操作。

写入文本文件

Tim 解释了如何使用 File.WriteAllLines 方法将数据写入文本文件。 他演示了如何在列表中添加新行,并将更新后的列表写回文件。

lines.Add("Sue,Storm,WWIStorm.com");
File.WriteAllLines(filePath, lines);
lines.Add("Sue,Storm,WWIStorm.com");
File.WriteAllLines(filePath, lines);

这段代码将一个新条目添加到列表中,并将整个列表写回文件。

创建数据模型并从文件中填充数据模型

Tim 创建了一个 Person 类来表示文本文件中每个条目的数据结构。

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string URL { get; set; }
}
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string URL { get; set; }
}

然后他读取文件并填充 Person 对象的列表。

List<Person> people = new List<Person>();
List<string> lines = File.ReadAllLines(filePath).ToList();

foreach (string line in lines)
{
    string[] entries = line.Split(',');
    Person newPerson = new Person
    {
        FirstName = entries[0],
        LastName = entries[1],
        URL = entries[2]
    };
    people.Add(newPerson);
}
List<Person> people = new List<Person>();
List<string> lines = File.ReadAllLines(filePath).ToList();

foreach (string line in lines)
{
    string[] entries = line.Split(',');
    Person newPerson = new Person
    {
        FirstName = entries[0],
        LastName = entries[1],
        URL = entries[2]
    };
    people.Add(newPerson);
}

此代码读取每一行,按逗号拆分,并用提取的数据创建一个 Person 对象。

字符串插值

Tim 介绍了字符串插值,这是 C# 6.0 中的一项功能,可以简化变量和字符串的组合过程。 此方法在字符串前使用 $ 符号和大括号 {},以便直接在字符串内嵌入变量。

foreach (var person in people)
{
    Console.WriteLine($"{person.FirstName} {person.LastName}: {person.URL}");
}
foreach (var person in people)
{
    Console.WriteLine($"{person.FirstName} {person.LastName}: {person.URL}");
}

与使用 + 运算符的传统连接方法相比,这种语法更加简洁和高效。

C# 文件读取写入

数据验证

Tim 强调了从文本文件读取数据时验证数据的重要性。他指出了假设数据结构的风险,并建议检查拆分条目的长度。

foreach (string line in lines)
{
    string[] entries = line.Split(',');
    if (entries.Length == 3)
    {
        Person newPerson = new Person
        {
            FirstName = entries[0],
            LastName = entries[1],
            URL = entries[2]
        };
        people.Add(newPerson);
    }
    else
    {
        // Handle error
        Console.WriteLine("Invalid data format.");
    }
}
foreach (string line in lines)
{
    string[] entries = line.Split(',');
    if (entries.Length == 3)
    {
        Person newPerson = new Person
        {
            FirstName = entries[0],
            LastName = entries[1],
            URL = entries[2]
        };
        people.Add(newPerson);
    }
    else
    {
        // Handle error
        Console.WriteLine("Invalid data format.");
    }
}

这样可以确保只处理条目数量正确的行,避免潜在的运行时错误。

向列表中添加对象

Tim 演示了如何向列表中添加新对象。他使用 Person 类的匿名实例向列表中添加一个新人。

people.Add(new Person { FirstName = "Greg", LastName = "Jones", URL = "WOWT.com" });
people.Add(new Person { FirstName = "Greg", LastName = "Jones", URL = "WOWT.com" });

这将在单行中创建并初始化一个新的 Person 对象,然后将其添加到 people 列表中。

将数据写回文本文件

Tim 解释了如何将 Person 对象列表写回文本文件。他将 Person 对象的列表转换为字符串列表,其中每个字符串代表文件中的一行。

List<string> output = new List<string>();
foreach (var person in people)
{
    output.Add($"{person.FirstName},{person.LastName},{person.URL}");
}
File.WriteAllLines(filePath, output);
List<string> output = new List<string>();
foreach (var person in people)
{
    output.Add($"{person.FirstName},{person.LastName},{person.URL}");
}
File.WriteAllLines(filePath, output);

此代码迭代 people 列表,为每个 Person 对象创建一个 CSV 字符串,并将字符串列表写入文件。

结论

Tim Corey 的 C# 文件 I/O 操作详细指南提供了从文本文件读取和向文本文件写入的实用见解。 按照他的示例,开发人员可以有效地使用文本文件管理数据,并实施强大的数据存储解决方案。 如需深入了解和亲身体验,我强烈建议您观看 Tim Corey 的视频,他在视频中通过实际案例深入探讨了这些概念。

Hero Worlddot related to C# 读写文件
Hero Affiliate related to C# 读写文件

分享您的所爱,赚取更多收入

您为使用 .NET、C#、Java、Python 或 Node.js 的开发人员创建内容吗?将您的专业知识转化为额外收入!

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我