C#如何在windows窗体中保存用户输入

C#如何在windows窗体中保存用户输入,c#,winforms,C#,Winforms,我目前正在尝试制作一个小程序,将用户在文本框中的输入存储到一个文件中,但不知何故,我无法将输入保存到该文件。这是我迄今为止所做的: 头等舱: class Name { private string SongName; private string ArtistName; //Constructor public Name(string SongName, string ArtistName) { this.ArtistName = Art

我目前正在尝试制作一个小程序,将用户在文本框中的输入存储到一个文件中,但不知何故,我无法将输入保存到该文件。这是我迄今为止所做的:

头等舱:

class Name
{
    private string SongName;
    private string ArtistName;

    //Constructor
    public Name(string SongName, string ArtistName)
    {
        this.ArtistName = ArtistName;
        this.SongName = SongName;
    }

    //Properties for SongName
    public string songName
    {
        get { return SongName; }
        set { SongName = value; }
    }

    //Properties for ArtistName
    public string artistName
    {
        get { return ArtistName; }
        set { ArtistName = value; }
    }
}
以下是Form1代码:

    public Form1()
    {
        InitializeComponent();
    }

    private string SongName, ArtistName;

    public void Registry()
    {
        List<Name> MusicList = new List<Name>();
        MusicList.Add(new Name(SongName = txtSongName.Text , ArtistName = txtArtistName.Text)); //Add new elements to the NameClass

        //Save the list
        StreamWriter FileSaving = new StreamWriter("MusicList");
        for (int i = 0; i < MusicList.Count; i++)
        {
            string sName = MusicList[i].songName;
            string aName = MusicList[i].artistName;
        }
        FileSaving.Close();
    }

    private void btnEnter_Click(object sender, EventArgs e)
    {
        Registry();
        //Set the textbox to emty so the user can enter new data
        txtArtistName.Text = "";
        txtSongName.Text = "";
    }
public Form1()
{
初始化组件();
}
私有字符串SongName、ArtistName;
公共无效登记处()
{
List MusicList=新列表();
MusicList.Add(新名称(SongName=txtSongName.Text,ArtistName=txtArtistName.Text));//向NameClass添加新元素
//保存列表
StreamWriter FileSaving=新的StreamWriter(“MusicList”);
for(int i=0;i
…您从未向文件写入任何内容


注意调用
file.WriteLine(第行)另外…您意识到您创建的文件没有扩展名,而且?

这里您创建的是
StreamWriter,但从未使用过它:

StreamWriter FileSaving = new StreamWriter("MusicList");
for (int i = 0; i < MusicList.Count; i++)
{
    string sName = MusicList[i].songName;
    string aName = MusicList[i].artistName;
}
FileSaving.Close();
StreamWriter FileSaving=新的StreamWriter(“MusicList”);
for(int i=0;i
字符串aName和sName已分配给但从未保存

请参见此处有关使用StreamWriter的示例:


在for循环中,您需要实际将值写入流

for (int i = 0; i < MusicList.Count i++)
{
    string sName = MusicList[i].songName;
    string aName = MusicList[i].artistName;
    FileSaving.WriteLine(sName + ' ' + aName);
}
for(int i=0;i
使用(StreamWriter writer=newstreamwriter(filePath))
{
for(int i=0;i
我认为您应该使用XML序列化

这是我的序列化泛型类

public static class Serializer<T>
{
    public static T Deserialize(string path)
    {
        System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(T));

        System.IO.FileStream stream = null;

        try
        {
            stream = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);

            return (T)serializer.Deserialize(stream);
        }
        finally
        {
            if (stream != null)
            {
                stream.Close();
                stream.Dispose();
            }
        }
    }

    public static void Serialize(string path, T obj, bool createFolder = false)
    {
        System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(T));

        if (createFolder)
        {
            System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(path));
        }

        using (System.Xml.XmlTextWriter xmlWriter = new System.Xml.XmlTextWriter(path, System.Text.Encoding.Unicode))
        {
            xmlWriter.Formatting = System.Xml.Formatting.Indented;

            serializer.Serialize(xmlWriter, obj);

            xmlWriter.Flush();
            xmlWriter.Close();
        }
    }
}
公共静态类序列化程序
{
公共静态T反序列化(字符串路径)
{
System.Xml.Serialization.XmlSerializer serializer=new System.Xml.Serialization.XmlSerializer(typeof(T));
System.IO.FileStream stream=null;
尝试
{
stream=new System.IO.FileStream(路径,System.IO.FileMode.Open,System.IO.FileAccess.Read,System.IO.FileShare.Read);
返回(T)序列化程序。反序列化(流);
}
最后
{
if(流!=null)
{
stream.Close();
stream.Dispose();
}
}
}
公共静态void序列化(字符串路径,T obj,bool createFolder=false)
{
System.Xml.Serialization.XmlSerializer serializer=new System.Xml.Serialization.XmlSerializer(typeof(T));
如果(创建文件夹)
{
System.IO.Directory.CreateDirectory(System.IO.Path.GetDirectoryName(Path));
}
使用(System.Xml.XmlTextWriter xmlWriter=new System.Xml.XmlTextWriter(path,System.Text.Encoding.Unicode))
{
xmlWriter.Formatting=System.Xml.Formatting.Indented;
serializer.Serialize(xmlWriter,obj);
xmlWriter.Flush();
xmlWriter.Close();
}
}
}
然后是注册方法

    public void Registry()
    {
        List<Name> MusicList = new List<Name>();
        MusicList.Add(new Name(SongName = txtSongName.Text , ArtistName = txtArtistName.Text)); //Add new elements to the NameClass

        Serializer<List<Name>>.Serialize(@"C:\saved.xml", MusicList);
    }
公共无效注册表()
{
List MusicList=新列表();
MusicList.Add(新名称(SongName=txtSongName.Text,ArtistName=txtArtistName.Text));//向NameClass添加新元素
Serializer.Serialize(@“C:\saved.xml”,MusicList);
}

请注意,您必须在类名中添加默认构造函数

您不需要使用streamwriter,只需打开它
文件保存。writeline
您的代码不需要
任何内容
还有这行字符串sName=MusicList[i]的问题;字符串aName=MusicList[i]。艺人姓名;你不写任何文件,我也会阅读如何使用属性。这里很简单的问题,如果你只看你的代码,并考虑什么是失踪。好运气搜索例子,你会学到很多。在这种情况下,你应该一行一行地去评论每一行的功能。这将帮助您了解正在发生的事情。你可能会意识到你从未对任何写入文件的内容发表过评论。我不完全清楚你为什么这样做,但请不要删除你的问题内容。@JeremyK我希望你是在开玩笑吧?作为一个初学者并不能成为你知道如何使用谷歌的借口。你指出这一点并没有错。只是说你的语气很严厉,如果这个人对编程非常陌生,甚至很年轻,我也不会感到惊讶。只是不需要在床上睡着。键:)而他对谷歌技能的缺乏并不能弥补他对编程的理解不足。他的问题不属于这里,因为他显然需要有人来指导他。
    public void Registry()
    {
        List<Name> MusicList = new List<Name>();
        MusicList.Add(new Name(SongName = txtSongName.Text , ArtistName = txtArtistName.Text)); //Add new elements to the NameClass

        Serializer<List<Name>>.Serialize(@"C:\saved.xml", MusicList);
    }