1

我想将一些字段和记录插入到使用结构创建的文件中。我不确定我是否以正确的方式提出问题,但这是我编写的代码:

 struct Student
 {
    public string Name;
    public int Age;
    public int ID;
    public string Email;
    public string Country;
    public void ClearStudentInfo()
    {
        Name = "";
        Age = 0;
        ID = 0;
        Email = "";
        Country = "";
    }

    static void Main(string[] args)
    {
        FileStream fsw = new FileStream("SomeFile.txt", FileMode.Append, FileAccess.Write);
        StreamWriter Sw = new StreamWriter(fsw);
        Sw.WriteLine("John", 22, 3254, "John123@yahoo.com", "United States");

        Sw.Close();
        fsw.Close();
    }
}

当我打开文件 SomeFile.txt 时,它只显示 John 而不是其余的记录。

反正有没有以更有条理的方式插入它?要出现在表格或文件中,如下所示:

Name: John
Age: 22
ID: 3254
E-mail: John123@yahoo.com
Country: United States

如果我要插入的不仅仅是学生信息,此代码是否适用于此?!

任何答案将不胜感激。

谢谢你。

4

3 回答 3

1
  1. 你为什么使用结构? 读这些? 我知道你标记了 struct 但我看不出有任何理由在这里使用它。

  2. StreamWriter.WriteLine 没有做你认为它做的事情。您试图使用不会为您写出每个项目。

  3. 正如宇宙先生所提到的,您最好在常规问题中格式化您的输出。但是,请参阅下文以获取您想要的输出。如果你变得好色并想要动态输出,你可以做一个查找表或反射。

    class Student
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public int ID { get; set; }
        public string Email { get; set; }
        public string Country { get; set; }
    
        public void ClearStudentInfo()
        {
            Name = "";
            Age = 0;
            ID = 0;
            Email = "";
            Country = "";
        }
    
        public string FormatForOutput()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("Name: ");
            sb.Append(Name);
            sb.Append("\nAge: ");
            sb.Append(Age);
            sb.Append("\nID: ");
            sb.Append(ID);
            sb.Append("\nE-Mail: ");
            sb.Append(Email);
            sb.Append("\nCountry: ");
            sb.Append(Country);
            return sb.ToString();
        }
    }
    

    使用 StringBuilder 来提高 4+ 级联的效率。参考

然后你可以做

    var student = new Student() { Name = "John", Age = 22, ID = 3254, Email = "John123@yahoo.com", Country = "United StateS" };
    using (FileStream fsw = new FileStream("SomeFile.txt", FileMode.Append, FileAccess.Write))
    {
        using (StreamWriter sw = new StreamWriter(fsw))
        {
            sw.WriteLine(student.FormatForOutput());
        }
    }

“使用”语句会为您处理流的关闭,因此您不必担心它。尽管我讨厌该示例不使用流,但请参见此处。

于 2013-04-24T00:32:31.260 回答
0

非常困惑参数的含义是什么WriteLine。你有这一行:

Sw.WriteLine("John", 22, 3254, "John123@yahoo.com", "United States");

不清楚为什么您认为此行会导致您寻求的输出,但此调用传递字符串“John”并作为额外参数传递(到string.Format(...))值、、、223254该方法。由于您不使用任何字符串替换标记(例如),因此您的额外参数将被完全丢弃。"John123@yahoo.com""United States"{0}

因此,您只打印出“John”也就不足为奇了。

你说你想要这个输出:

姓名:John
年龄:22
ID:3254
电子邮件:John123@yahoo.com
国家:美国

但是,当您从不输出字符串“Name:”、“Age:”、“ID:”等时,如何输出呢?

于 2013-04-24T00:16:29.183 回答
0

输出您希望的信息类型的最有组织的方式是使用 CSV。

WriteLine("Name,Age,ID,E-Mail,Contry");
WriteLine("John,22,3254,John123@yahoo.com,United States");
....

它可以很容易地被程序读取并使用 Excel 或类似的电子表格软件将其作为表格查看。

于 2013-04-24T00:22:45.813 回答