-1

私は現在、テキストボックス内のユーザーによる入力をファイルに保存する小さなプログラムを作成しようとしていますが、どういうわけかファイルへの入力を保存できませんでした。これは私がこれまでに行ったことです。

ファーストクラス:

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 = "";
    }
4

5 に答える 5

2

....あなたはファイルに何も書きません.....

簡単なGoogleがこれを手に入れました

alsoの呼び出しに注意してfile.WriteLine(line);ください...また、拡張子を付けてファイルを作成していないことに気付きましたか?

于 2013-03-20T19:20:38.100 に答える
2

for ループでは、値を実際にストリームに書き込む必要があります。

for (int i = 0; i < MusicList.Count i++)
{
    string sName = MusicList[i].songName;
    string aName = MusicList[i].artistName;
    FileSaving.WriteLine(sName + ' ' + aName);
}
于 2013-03-20T19:21:07.097 に答える
1

ここでは、作成していますが、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();

文字列 aName および sName が割り当てられますが、保存されることはありません。

StreamWriter の使用については、こちらの例を参照してください。

http://msdn.microsoft.com/en-us/library/system.io.streamwriter.aspx

于 2013-03-20T19:20:38.050 に答える
1
using (StreamWriter writer = new StreamWriter(filePath))
{
        for (int i = 0; i < MusicList.Count; i++)
        {
            writer.WriteLine(MusicList[i].songName + " , " + MusicList[i].artistName);
        }
}
于 2013-03-20T19:21:23.813 に答える
0

私の意見では、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();
        }
    }
}

次にRegistyメソッドで

    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);
    }

クラス Name にデフォルトのコンストラクターを追加する必要があることに注意してください

于 2013-03-21T09:42:07.533 に答える