无法将列表附加到现有文件。 C#

Posted

技术标签:

【中文标题】无法将列表附加到现有文件。 C#【英文标题】:Can't append a list to an existing file. C# 【发布时间】:2021-02-11 16:41:18 【问题描述】:

**我有一个现有的 .txt 文件,我想用它来存储我的数据,但是在使用此代码时,我在 switch case 1 的第 39 行遇到错误。我是 *** 和一般编码的新手所以,如果我犯了一些错误,请原谅:) **

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

class Program


    public static List<Pw> Site = new List<Pw>();
    static void Main(string[] args)
    

        string file = @"C: \Users\james\Documents\DataFolder\Vault.txt";
        
        string command = "";
        while (command != "exit")
        
            Console.Clear();
            Console.WriteLine("Please enter a command: ");
            command = Console.ReadLine().ToLower();
            switch (command)
            
                case "1":
                    AddPw();                        
                    File.AppendAllLines(file, Pw.Site);
                    

                    break;
                  
                case "2":
                    
                    if (File.Exists(file))
                    
                        // Read all the content in one string 
                        // and display the string 
                        string str = File.ReadAllText(file);
                        Console.WriteLine(str);
                    
                    break;
            
        


    
    private static void AddPw()
    
        Pw pw = new Pw();

        Console.Write("Enter the Username/Email: ");
        pw.Username = Console.ReadLine();

        Console.Write("Enter Full Name: ");
        pw.FullName = Console.ReadLine();

        Console.Write("Enter Phone Number: ");
        pw.PhoneNumber = Console.ReadLine();

        Console.Write("Enter Your Password: ");
        string password = Console.ReadLine();
        pw.Password = password;

        Site.Add(pw);
    

    private static void PrintPw(Pw pw)
    
        Console.WriteLine("Username/Email: " + pw.Username);
        Console.WriteLine("Full Name: " + pw.FullName);
        Console.WriteLine("Phone Number: " + pw.PhoneNumber);
        Console.WriteLine("Password: " + pw.Password[0]);
        Console.WriteLine("-------------------------------------------");
    

    private static void ListPw()
    
        if (Site.Count == 0)
        
            Console.WriteLine("Your address book is empty. Press any key to continue.");
            Console.ReadKey();
            return;
        
        Console.WriteLine("Here are the current people in your address book:\n");
        foreach (var pw in Site)
        
            PrintPw(pw);
        
        Console.WriteLine("\nPress any key to continue.");
        Console.ReadKey();
    


         


public class Pw

    public string Username  get; set; 
    public string FullName  get; set; 
    public string PhoneNumber  get; set; 
    public string Password  get; set; 

【问题讨论】:

欢迎您,能否请您附上错误消息并告诉我们您已经尝试过什么?似乎 Pw 不包含 Site 属性。 【参考方案1】:

我已经更新了您现有的功能。 使用此功能,您可以在现有文件中添加和附加数据。

private static void AddPw(string filePath)

    try
    
        Pw pw = new Pw();
        if (!File.Exists(filePath))
        
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter(filePath))
            
                Console.Write("Enter the Username/Email: ");
                pw.Username = Console.ReadLine();
                sw.WriteLine(pw.Username);

                Console.Write("Enter Full Name: ");
                pw.FullName = Console.ReadLine();
                sw.WriteLine(pw.FullName);

                Console.Write("Enter Phone Number: ");
                pw.PhoneNumber = Console.ReadLine();
                sw.WriteLine(pw.PhoneNumber);

                Console.Write("Enter Your Password: ");
                pw.Password = Console.ReadLine();
                sw.WriteLine(pw.Password);
            
        
        else
        
            
            using (StreamWriter sw = File.AppendText(filePath))
            
                Console.Write("Enter the Username/Email: ");
                pw.Username = Console.ReadLine();
                sw.WriteLine(pw.Username);

                Console.Write("Enter Full Name: ");
                pw.FullName = Console.ReadLine();
                sw.WriteLine(pw.FullName);

                Console.Write("Enter Phone Number: ");
                pw.PhoneNumber = Console.ReadLine();
                sw.WriteLine(pw.PhoneNumber);

                Console.Write("Enter Your Password: ");
                pw.Password = Console.ReadLine();
                sw.WriteLine(pw.Password);
            
        
    
    catch (Exception ex)
    
    

【讨论】:

【参考方案2】:
File.AppendAllLines(file, Pw.Site);

在这一行中,您需要传递一个 IEnumerable 才能使 AppendAllLines 工作。您可以使用 ConvertAll 方法轻松地将站点(List&lt;Pw&gt;)转换为IEnumerable&lt;string&gt;。这是实现这一目标的一种方法:

用这个替换那行:

File.AppendAllLines(file, Site.ConvertAll<string>(
  (p) => string.Format("0 | 1 | 2 | 3\n", 
    p.Username, 
    p.FullName, 
    p.PhoneNumber, 
    p.Password
  ))
);

这个“lambda”基本上接受你的 Pw 对象并将其转换为内联字符串。

【讨论】:

以上是关于无法将列表附加到现有文件。 C#的主要内容,如果未能解决你的问题,请参考以下文章

为啥在将项目附加到现有列表时会得到“无”项目? [复制]

如何在 Java DocumentBuilder 中解析 XSD 文件期间将元素附加到现有节点列表

如何将 gekko 对象插入/附加到现有列表/数组?

以角度将行附加到现有数据列表

如何通过 python 将 JSON 数据附加到存储在 Azure blob 存储中的现有 JSON 文件?

如何将整数附加到现有二进制文件