C#程序:逐行读取文件内容


介绍

在这里,我们将学习编写一个C#程序来逐行读取文件内容。有多种方法可以做到这一点,我们将逐一讨论它们。

C#中进行文件处理。在大多数情况下,文件用于存储数据。通俗地说,文件处理或文件管理就是各种过程,例如创建文件、从中读取、向其中写入、追加等等。文件的读取和写入是文件处理中最常见的两个操作。

1. 使用File.ReadLines()方法

逐行读取文件内容的第一种方法是使用File.ReadLines()方法。此方法接受字符编码作为可选参数。

嗯,此过程可能会引发一些异常,例如IO异常。如果发生I/O错误,则会引发此异常;如果尝试打开的文件未找到,则会引发另一个错误FileNotFoundException。

此过程还有一个缺点:当处理大型文件时,此技术效率非常低。它返回Enumerable,我们可以先开始枚举,然后才返回整个集合。

算法

下面的算法将逐步说明如何使用File.ReadLines()方法逐行读取文件内容。

下面讨论的算法将引导我们创建程序。

步骤1  创建一个字符串,用于存储文件路径的名称,记住这是一个绝对路径。

步骤2  使用IEumerable获取最终结果,因为文件是逐行读取的。

步骤3  使用Environment.Newline获取为环境定义的新行字符串。然后程序结束。

示例

以下是此过程的代码:

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

public class Example {
   public static void Main() {
      string fileloc = @"D:\ttpt\loc
ew.txt"; IEnumerable<string> lines = File.ReadLines(fileloc); Console.WriteLine(String.Join(Environment.NewLine, lines)); } }

输出

This is a file.
Hello from tutorials point.

首先需要创建一个字符串类型的变量,其中包含文件位置的地址。然后程序逐行读取文件。

2. 使用File.ReadAllLines()方法

逐行读取文件内容的另一种方法是使用File.ReadAllLines()方法。对于大型数据文件,我们不应使用ReadAllLines,因为与返回Enumerable的ReadLines不同,ReadAllLines返回包含文件所有行的字符串数组,并且我们必须等待返回整个字符串数组后才能访问该数组。

此方法接受字符编码作为可选参数,类似于ReadLines。嗯,此过程可能会引发一些异常,例如IO异常。如果发生I/O错误,则会引发此异常;如果尝试打开的文件未找到,则会引发另一个错误FileNotFoundException。

算法

下面的算法将逐步说明如何使用File.ReadAllLines()方法逐行读取文件内容。

下面讨论的算法将引导我们创建程序。

步骤1  创建一个字符串,用于存储文件路径的名称,记住这是一个绝对路径。

步骤2  接下来,使用ReadAllLines,程序打开文本文件,读取其所有行,然后结束。

步骤3 − 使用Environment.Newline获取为环境定义的新行字符串。然后程序结束。

示例

以下是此过程的代码:

using System;
using System.IO;

public class Example {
   public static void Main() {
      string fileloc = @"D:\ttpt\loc
ew.txt"; string[] lines = File.ReadAllLines(fileloc); Console.WriteLine(String.Join(Environment.NewLine, lines)); } }

输出

This is a file.
Hello from tutorials point.

首先需要创建一个字符串类型的变量,其中包含文件位置的地址。然后,程序逐行读取文件。这里的区别在于,行是在字符串中读取的。当程序中使用string.join时,它们都会被连接起来。

3. 使用StreamReader.ReadLine()方法

还有一种方法可以使用StreamReader类逐行读取文件。该方法是StreamReader.ReadLine()。这运行到文件的末尾。

它的工作原理是从当前流中读取一行文本并将其作为字符串返回。这将返回输入流中的下一行,如果输入流已达到其结尾,则返回null。这样它就到达了文件的末尾。

如果发生任何I/O错误,这里也有I/O异常。另一个异常是OutOfMemoryException,当没有足够的内存来为返回的字符串创建缓冲区时发生。

算法

下面的算法将逐步说明如何使用StreamReader.ReadLine()方法逐行读取文件内容。

下面讨论的算法将引导我们创建程序。

步骤1  创建一个字符串,用于存储文件路径的名称,记住这是一个绝对路径。

步骤2 −  创建一个新的读取器来读取文件内容。

步骤3  while循环运行到文件的末尾。当它到达null时,确定结束。

步骤4  最后,在读取文件内容后,代码退出。

示例

以下是此过程的代码:

using System;
using System.IO;

public class Example {
   public static void Main() {
      string fileloc = @"D:\ttpt\loc
ew.txt"; using (StreamReader read = new StreamReader(fileloc)) { string line; while ((line = read.ReadLine()) != null) { Console.WriteLine(line); } } } }

输出

This is a file.
Hello from tutorials point.

在此方法中,也首先创建一个包含文件地址的字符串。然后创建一个读取实例。它通过逐行读取内容到达null,即文件的末尾。

时间复杂度

由于我们在这里逐行读取文件,但一次读取所有内容。无论使用什么方法,即File.ReadLines()、Files.ReadAllLines()和StreamReader.ReadLine()。所有这些都一次性读取文件。因此,这里每种方法的时间复杂度都是O(1)。

结论

在本文中,我们广泛讨论了C#程序逐行读取文件内容的方法。我们学习了如何通过三种不同的方式实现:两种来自File类,分别是ReadLines()和ReadAllLines();第三种来自StreamReader类。然后我们讨论了这三种技术的代码和算法。我们希望本文能帮助您增强对C#的了解。

更新于:2023年4月21日

14K+ 浏览量

开启你的职业生涯

完成课程获得认证

开始学习
广告