首页 > 解决方案 > 使用 C# 在文本文件中换行

问题描述

我是一个刚开始学习C#的学生,

我正在尝试使用文本文件创建注册和登录函数,并将用户输入的详细信息保存到文本文件中,但是当我再次运行我的函数时,它会重写已经存在的内容而不是开始新行。

这是我的一些重要的代码

using System;
using System.IO;

namespace SDD_Assessment_2
{
    class Program
    {
        static void Main(string[] args)
        {
            //Write();
            //GetTime();
            var privInfo = SignUp();
            var FullName = Profile(privInfo);
            Profile(privInfo);
            //Test(FullName);
        }
        const string filename = "Workout.txt";
        static string[] SignUp()
        {
            string[] privinfo = new string[4];

            Console.Write("First Name: ");
            privinfo[0] = Console.ReadLine();
            Console.Write("Last Name: ");
            privinfo[1] = Console.ReadLine();
            Console.Write("Email: ");
            privinfo[2] = Console.ReadLine();
            Console.Write("Password: ");
            privinfo[3] = Console.ReadLine();

            StreamWriter NewAccount = new StreamWriter(filename);
            //NewAccount.WriteLine(privinfo[0] + "," + privinfo[1] + "," + privinfo[2] + "," + privinfo[3] + Environment.NewLine);
            File.AppendAllText(filename, privinfo[0] + ", " + privinfo[1] + "," + privinfo[2] + "," + privinfo[3] + Environment.NewLine);
            NewAccount.Close();

            return privinfo;
        }
    }
}

当我现在运行它时,它显示“System.IO.IOException:该进程无法访问文件'filename',因为它正在被另一个进程使用。”

标签: c#text-files

解决方案


您的代码大部分是正确的。你需要改变

StreamWriter NewAccount = new StreamWriter(filename);
//NewAccount.WriteLine(privinfo[0] + "," + privinfo[1] + "," + privinfo[2] + "," + privinfo[3] + Environment.NewLine);
File.AppendAllText(filename, privinfo[0] + ", " + privinfo[1] + "," + privinfo[2] + "," + privinfo[3] + Environment.NewLine);
NewAccount.Close();

只是

File.AppendAllText(filename, privinfo[0] + ", " + privinfo[1] + "," + privinfo[2] + "," + privinfo[3] + Environment.NewLine);

您的分配NewAccount打开文件的流,使文件句柄保持打开状态。这意味着您File.AppendAllText无法完成,因为该文件之前是在非共享模式下打开的。

如果您已删除File.AppendAllText,则不会收到错误消息,但最终会得到一个零字节文件,因为您没有向流中写入任何内容。

由于您根本不使用NewAccount,删除这些行将允许File.AppendAllText完成而不会出错,并且...附加您期望的所有文本,这将是名字和姓氏、电子邮件和密码的值。


推荐阅读