1

我正在尝试制作一个小程序来获取用户输入并将其存储在文件中,但我希望该文件最多包含 100 个元素:

假设用户添加了 100 个名称,用户添加的下一个名称将显示一条消息“列表已满”

这是我到目前为止所做的代码:

    public Form1()
    {
        InitializeComponent();
    }
    private string SongName, ArtistName;

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

        //check if the input is correct
        if (txtSongName.TextLength < 1 || txtArtistName.TextLength < 1)
        {
            Info info = new Info();
            info.Show();
        }
        else //if input is correct data will be stored
        { 
            //Create a file to store data
            StreamWriter FileSaving = new StreamWriter("MusicList", true);
            for (int i = 0; i < MusicList.Count; i++)
            {
                string sName = MusicList[i].songName; //Create new variable to hold the name
                string aName = MusicList[i].artistName; //Create new variable to hold the name
                FileSaving.Write(sName + " by "); //Add SongName to the save file
                FileSaving.WriteLine(aName); //Add ArtistName to the save file

            }
            FileSaving.Close();
        }
    }

    private void btnEnter_Click(object sender, EventArgs e)
    {
        Registry();
        //Set the textbox to empty so the user can enter new data
        txtArtistName.Text = "";
        txtSongName.Text = "";
    }

    private void btnClose_Click(object sender, EventArgs e)
    {
        Application.Exit();
    }
4

2 回答 2

3
 private const int MAX_STORED_SONGS = 100;//as class level field


 for (int i = 0; i < MusicList.Count && i < MAX_STORED_SONGS; i++)

 //...after the loop
 if( MusicList.Count > MAX_STORED_SONGS )
    errorMessageLabel.Text = "List is full, only 100 items added"

我不确定您的列表选择器是什么样的,但您可能希望通过在提交页面之前使用一些 javascript/validation 客户端来实际阻止他们选择 100 多个项目。

您的代码不清楚的是,当用户提交一首歌曲时,您创建一个新的空 MusicList,向其中添加一个项目,但您循环遍历它,就好像有多个项目一样。也许您应该首先阅读文件以确定其中有多少首歌曲,这样您就可以确定它何时为 100 首歌曲。

于 2013-03-20T20:53:20.313 回答
1

您可能希望尝试使用 xml 为您的数据提供一些结构。

如果您想将其保留为当前格式,您唯一的选择是计算文件中的 NewLines,并查看该计数加上音乐列表中的任何新项目是否超过了您的限制。

List<string> lines = new List<string>(System.IO.File.ReadAllLines(MyFile));
lines.Add(sName + " by " + aName);

int lineCount = lines.Count;
//limit reached
if(lineCount > 100 )
{
    //TODO: overlimit code
} else {
    System.IO.File.WriteAllLines(MyFile, lines.ToArray());
}
于 2013-03-20T20:56:36.217 回答