如何将目录列表保存到xml文件C#

时间:2011-03-27 05:19:25

标签: c# xml arrays list save

我为此寻找了一切。可能是我只是在搜索中键入错误的东西我不确定。所以,如果你知道一个好的教程或这个例子请分享。我正在努力学习。

我正在使用一个C#Windows窗体应用程序。我有信息(在这种情况下是电影)保存在XML文件中。我像这样保存了xml文件。

//Now we add new movie.
            XmlElement nodRoot = doc.DocumentElement;
            string allMyChildren = nodRoot.InnerText;
            string capitalized = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(movieEditNameTextbox.Text);
            int indexLookForNewMake = allMyChildren.IndexOf(capitalized);
            if (indexLookForNewMake >= 0)
            {
                MessageBox.Show("Movie is already saved.", "Error");
            }
            else
            {
                XmlElement el = doc.CreateElement("Name");
                el.InnerText = capitalized;
                doc.DocumentElement.AppendChild(el);
                //Check if Year is really a Number.
                if (movieEditYearTextbox.Text.All(Char.IsDigit))
                {
                    //Remove ' cause it gives errors.
                    string capitalizedFixed = capitalized.Replace("'", "");
                    string capitalizedFinalFixed = capitalizedFixed.Replace("\"", "");
                    //Assign Attribute to each New one.
                    el.SetAttribute("Name", capitalizedFinalFixed);
                    el.SetAttribute("Type", movieEditTypeDropdown.Text);
                    el.SetAttribute("Year", movieEditYearTextbox.Text);
                    //Reset all fields, they don't need data now.
                    movieEditNameTextbox.Text = "";
                    movieEditYearTextbox.Text = "";
                    movieEditTypeDropdown.SelectedIndex = -1;
                    removeMovieTextbox.Text = "";

                    doc.Save("movie.xml");

                    label4.Text = "Movie Has been Edited";
                    loadXml();
                }
                else
                {
                    //Error out. Year not a Number
                    MessageBox.Show("Check movie year. Seems it isn't a number.", "Error");
                }
            }

一切正常。现在我要做的就是把它放在你可以选择目录的地方,它搜索目录和子目录并获取文件名并将它们保存到XML文件中。

我用它来试图完成这个。它确实拉了清单。但它并没有拯救它。它不保存新信息。

我无法使用LINQ,因为它会因某些原因导致与其他代码冲突。

DirectoryInfo dirCustom = new DirectoryInfo(@"D:\Video");
        FileInfo[] filCustom;
        filCustom = dirCustom.GetFiles("*",SearchOption.AllDirectories);

        //Open XML File.
        XmlDocument doc = new XmlDocument();
        doc.Load("movie.xml");

        XmlElement el = doc.CreateElement("Name");
        string fulCustoms = filCustom.ToString();

        foreach (FileInfo filFile in filCustom)
        {
            string capitalized = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(filFile.Name);
            string capitalizedFixed = capitalized.Replace("\"", "");
            el.SetAttribute("Name", capitalizedFixed);
            el.SetAttribute("Type", "EDIT TYPE");
            el.SetAttribute("Year", "EDIT YEAR");

            richTextBox1.AppendText(capitalizedFixed + "\r\n");
        }
        doc.Save("movie.xml");

        label4.Text = "Movie Has been Edited";
        loadXml();

现在,richTextBox会正确显示信息,但不会保存。 loadXml()只是我刷新datagridview的无声方式。

我完全失去了,不知道该去哪里。我知道我的编码很可怕,哈哈。我是新手。这是我工作的第一个更复杂的应用程序。

我想不出任何可以帮助你理解我的意思的信息。我希望你会。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

不确定您的LoadXML()方法究竟做了什么,但我对您的问题的唯一建议是改变您实现此功能的方式。

创建一个名为Movie

的对象
public class Movie 
{
    public Movie() {}
    public String Title { get; set; }
    blah... blah...
}

然后创建一个MovieList

public class MovieList : List<Movie> { }

然后在MovieList中实现以下两种方法。

public static void Serialize(String path, MovieList movieList)
{
    XmlSerializer serializer = new XmlSerializer(typeof(MovieList));

    using (StreamWriter streamWriter = new StreamWriter(path))
    {
       serializer.Serialize(streamWriter, movieList);
    }
}

public static MovieList Deserialize(String path)
{
    XmlSerializer serializer = new XmlSerializer(typeof(MovieList));
    using (StreamReader streamReader = new StreamReader(path))
    {
        return (MovieList) serializer.Deserialize(streamReader);
    }
}

多数民众赞成......您现在已经将您的对象序列化了,您可以检索数据以通过绑定或您选择的任何其他方法填充。