Как сохранить список каталогов в XML-файл C # - PullRequest
0 голосов
/ 27 марта 2011

Я искал повсюду для этого.Это может быть я просто ввожу не ту вещь в поиске, я не уверен.Итак, если вы знаете хороший учебник или пример этого, пожалуйста, поделитесь.Я пытаюсь научиться.

У меня есть приложение C # Windows Form, над которым я работаю.У меня есть информация (в данном случае фильмы), сохраненная в файле 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 () - это просто мой нубийский способ обновить представление данных.

Я полностью потерян и не знаю, куда обратиться.Я знаю, что мое кодирование, вероятно, ужасно, смеется.Я новичок в этом.Это мое первое более сложное приложение, над которым я работал.

Я не могу больше думать об информации, которая поможет вам понять, что я имею в виду.Я надеюсь, что вы делаете.

Большое спасибо за вашу помощь.

1 Ответ

2 голосов
/ 27 марта 2011

Не совсем точно знаю, что делает ваш метод LoadXML (), но мой единственный совет по вашей проблеме - изменить способ реализации этой функциональности.

Создайте объект с именем Movie

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

Затем создайте MovieList

public class MovieList : List<Movie> { }

Затем реализуйте следующие 2 метода внутри 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);
    }
}

Вот и все ... Теперь у вас есть сериализованный объект, и вы можете извлекать данные для заполнения посредством привязки или любых других методов, которые вы выберете.

...