我为此寻找了一切。可能是我只是在搜索中键入错误的东西我不确定。所以,如果你知道一个好的教程或这个例子请分享。我正在努力学习。
我正在使用一个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的无声方式。
我完全失去了,不知道该去哪里。我知道我的编码很可怕,哈哈。我是新手。这是我工作的第一个更复杂的应用程序。
我想不出任何可以帮助你理解我的意思的信息。我希望你会。
非常感谢你的帮助。
答案 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);
}
}
多数民众赞成......您现在已经将您的对象序列化了,您可以检索数据以通过绑定或您选择的任何其他方法填充。