C#程序:向现有文件追加文本


简介

追加是指向已写入的文档添加信息。在这里,我们将学习编写一个C#程序来向现有文件追加文本。我们知道C#中可以进行文件处理。在大多数情况下,文件用于存储数据。通俗地说,文件处理或文件管理包括各种过程,例如创建文件、从中读取、向其中写入、追加等等。

仅限于现有文件?

嗯,正如我们所知,追加通常意味着向已写入的文档添加信息片段。但是,如果我们尝试访问的文件不存在会怎样呢?假设我们正在搜索名为“madrid.txt”的文件以进行追加。如果该文件存在于指定的目录中,则会追加该文件。但是,如果“madrid.txt”文件不存在呢?然后,程序将创建一个名为“madrid.txt”的新文件,您可以在其中添加信息。因此,当我们尝试以追加模式打开文件时,如果该特定文件不存在,则会创建一个具有我们想要追加的文件名的新空文件。

1. File.AppendAllText(String, String) 方法

File.AppendAllText() 方法是我们追加到现有文件的非常常见的解决方案。此方法来自File类。此方法的语法如下所示。

public static void AppendAllText (string path, string? contents); 

在语法中,第一个字符串包含我们打算追加的文件的路径。之后,是我们要添加到文件的信息。这也会引发一些异常。如果我们尝试访问的文件的目录不存在,则会引发DirectoryNotFoundException异常。另一个主要的异常是UnauthorizedAccessException异常。当尝试访问文件的程序员是一个只读文件,或者指定的路径指向一个目录而不是文件时,就会发生这种情况。

使用此方法时,无论是否引发异常,文件句柄都将关闭。

算法

现在,我们将讨论创建一个程序以使用File.AppendAllText()将信息添加到文件的算法。

步骤1 − 首先,我们创建一个字符串来存储要追加的文件的地址,然后提供文件的地址。

步骤2 − 然后我们使用FileAppendAllText(),它以追加模式打开文件并将特定文本添加到文件。如果该文件不存在,则会创建具有该名称的新文件并添加文本。

步骤3 − 最后,从文件中读取文本,以便我们可以看到文件已追加,然后程序退出。

示例

// A program to append the file
using System;
using System.IO;

public class Program {
   public static void Main() {
      string loca = @"D:\madrid.txt";

      // Adding the text to the madrid.txt file
      File.AppendAllText(loca, Environment.NewLine + "UCL");

      // Reading the text from the madrid.txt file
      string txtappd = File.ReadAllText(loca);
      Console.WriteLine(txtappd);
   }
}

输出

UCL

因此,提供了文件的路径,然后此方法打开指定的文件,添加程序员所需的信息片段,然后关闭文件。非常简单,但是如果我们想将整个内容从一个文件复制到我们想要的文件怎么办?是的,此方法还可以解决我们的文件复制问题。现在是讨论算法的时候了。

算法

此算法是关于使用File.AppendAllText()。

步骤1 − 创建一个字符串来存储源文件的地址。

步骤2 − 创建另一个字符串来存储目标文件的地址。

步骤3 − 使用File.Readlines()将源文件复制到字符串中。

步骤4 − 通过File.AppendAllText()以追加模式打开文件。然后添加文本。

步骤5 − 完成后程序退出。

示例

// A program to append the file
using System;
using System.Collections.Generic;
using System.IO;

public class Program {
   public static void Main() {
      string sttr1 = @"D:\trophies.txt";
      string sttr2 = @"D:\madrid.txt";

      // Copying all the text from the source file in a string and then adding to the destination file
      IEnumerable<string> inform = File.ReadLines(sttr1);
      File.AppendAllLines(sttr2, inform);
   }
} 

现在让我们看看另一种方法。

2. File.AppendText() 方法

StreamWriter类是一个非常通用的类。它提供了许多用于向文件写入的方法。WriteLine() 或 Write() 是可用于向流添加文本的不同方法。

public static System.IO.StreamWriter AppendText (string path); 

可以使用 File.AppendAllText() 方法创建 StreamWriter 实例,该方法以 UTF-8 编码将文本追加到现有文件。如果指定的文件不存在,它还会创建一个新文件。

如果我们尝试访问的文件的目录不存在,则会引发DirectoryNotFoundException异常。另一个主要的异常是UnauthorizedAccessException异常。当尝试访问文件的程序员是一个只读文件,或者指定的路径指向一个目录而不是文件时,就会发生这种情况。

算法

现在,我们将讨论创建一个程序以使用File.AppendText()将信息添加到文件的算法。

步骤1 − 首先,我们创建一个字符串来存储要追加的文件的地址,然后提供文件的地址。

步骤2 − 现在,我们创建一个StreamReader实例。此步骤以追加模式打开文件并将文本添加到文件。我们使用File.AppendText()添加文本。

StreamReader.Write() 方法用于追加。如果用户想要追加文本并在末尾添加行终止符。使用 StreamReader.WriteLine() 方法。

步骤3 − 完成后程序退出。

示例

// A program to append the file
using System;
using System.IO;

public class Program {
   public static void Main() {
      string loca = @"D:\madrid.txt";

      // Adding the text to the specified file
      using (StreamWriter sw = File.AppendText(loca)) {
         sw.Write("UCL"); //use sw.WriteLine(If you want to add line termination)
      }

      // Read the text from the appended file
      string txtappd = File.ReadAllText(loca);
      Console.WriteLine(txtappd);
   }
}

输出

UCL

StreamWriter(String, Boolean) 构造函数的重载版本也等效于 File.AppendText()。对于布尔参数,我们使用 true。

StreamWriter(String, Boolean)算法

现在,我们将讨论创建一个程序以使用StreamWriter(String, Boolean)将信息添加到文件的算法。

步骤1 − 首先,我们创建一个字符串来存储要追加的文件的地址,然后提供文件的地址

步骤2 − 现在,我们创建一个StreamReader实例。此步骤以追加模式打开文件并将文本添加到文件。我们使用新的 Streamwriter() 添加信息。在这里,我们使用 StreamReader.Write() 方法进行追加。但是,如果我们需要追加文本并在末尾添加行终止符,则可以使用 StreamReader.WriteLine() 方法。

步骤3 − 最后,从文件中读取文本,以便我们可以看到文件已追加,然后程序退出。

示例

// A program to append the file
using System;
using System.IO;

public class Program {
   public static void Main() {
      string loca = @"D:\madrid.txt";

      // Adding the text to the specified file
      using (StreamWriter sw = new StreamWriter(loca, true)) {
         sw.Write("UCL"); //use sw.WriteLine(If you want to add line termination)
      }

      // Read the text from the appended file
      string txtappd = File.ReadAllText(loca);
      Console.WriteLine(txtappd);
   } 
}

输出

UCL

时间复杂度

由于在这里在这两个过程中,我们都使用文件处理。在第一个算法中,我们使用File.AppendAllText(),在第二个算法中,我们使用了File.AppendText(),并且两者都只是追加文件。它们获取新文本并将其添加到文件的末尾。因此,这里两种方法的时间复杂度都是O(1)。

结论

在本文中,我们讨论了向现有文件追加文本的不同方法。首先,我们讨论了需求以及是否只能对现有文件执行此操作。然后,我们讨论了追加File.AppendAllText()和File.AppendText()的方法。最后,我们讨论了算法和算法的代码。

我们希望本文能帮助您提高对C#的了解。

更新于:2023年7月14日

9000+ 次浏览

启动您的职业生涯

完成课程后获得认证

开始学习
广告
© . All rights reserved.