Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Hanz 18. 02. 2015, 21:06:48
-
Dobrý den, v testovacím projektu mám následující kód (není odladěný pro cestu v xml, ale tím to nebude). Vytvářím synchnně objekt a volá se konstruktor s parametrem cesty k souboru, ale u xmlDoc.Save(fileName) to hlásí chybu IOException, co je v titulku, ale mně je to nepochopitelné. Nevíte, prosím, čím by to mohlo být způsobené? Při synchronním volání? Děkuji předem. H.
Kód je následující:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.IO;
namespace TestXml
{
public class HighScoreData
{
private string fileName;
private XmlDocument xmlDoc;
private string pathInXml = "ArkanoidHighScore";
private HighScoreData()
{
}
public HighScoreData(string fileName)
{
this.fileName = fileName;
xmlDoc = new XmlDocument();
if (!File.Exists(fileName))
{
File.Create(fileName);
XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null);
XmlElement root = xmlDoc.DocumentElement;
xmlDoc.InsertBefore(xmlDeclaration, root);
XmlElement childElement = xmlDoc.CreateElement(string.Empty, "ArkanoidHighScore", string.Empty);
xmlDoc.AppendChild(childElement);
xmlDoc.Save(fileName);
}
}
public int LoadHighScore()
{
int highScore = 0;
xmlDoc.Load(fileName);
XmlNode node = xmlDoc.SelectSingleNode(pathInXml);
highScore = int.Parse(node.InnerText);
return highScore;
}
public void SaveHighScore(int score)
{
xmlDoc.Load(fileName);
XmlNode xmlNode = xmlDoc.SelectSingleNode(pathInXml);
if (xmlNode != null)
{
xmlNode.InnerText = score.ToString();
}
xmlDoc.Save(fileName);
}
}
}
-
Vyhoď řádek
File.Create(fileName);
-
Měl jste pravdu, díky moc. H.
-
nechcem ti toho nejako extra kecat, ale podla mna to robis extra komplikovane... preco parsujes XML manualne???
void Main()
{
HighScore myObject = new HighScore();
myObject.Name="HS";
myObject.Value=102;
XMLHelper.WriteXML(myObject,"aaaaa.xml");
var HighScoreFromFile=XMLHelper.ReadXML("aaaaa.xml");
}
public class HighScore
{
[XmlAttribute]
public string Name;
public int Value;
}
public static class XMLHelper{
public static void WriteXML(HighScore objectToWrite, string fileName){
var mySerializer = new XmlSerializer(typeof(HighScore));
using(var myWriter = new StreamWriter(fileName)){
mySerializer.Serialize(myWriter, objectToWrite);
}
}
public static HighScore ReadXML(string fileName){
var mySerializer = new XmlSerializer(typeof(HighScore));
HighScore retVal;
using(var myWriter = new StreamReader(fileName)){
retVal=(HighScore)mySerializer.Deserialize(myWriter);
}
return retVal;
}
}
-
alebo este o trosku univerzalnejsie
void Main()
{
HighScore myObject = new HighScore();
myObject.Name="HS";
myObject.Value=102;
XMLHelper.WriteXML(myObject,"aaaaa.xml");
var HighScoreFromFile=XMLHelper.ReadXML<HighScore>("aaaaa.xml");
}
public class HighScore
{
[XmlAttribute]
public string Name;
public int Value;
}
public static class XMLHelper{
public static void WriteXML<T>(T objectToWrite, string fileName){
var mySerializer = new XmlSerializer(typeof(T));
using(var myWriter = new StreamWriter(fileName)){
mySerializer.Serialize(myWriter, objectToWrite);
}
}
public static T ReadXML<T>(string fileName){
var mySerializer = new XmlSerializer(typeof(T));
T retVal;
using(var myWriter = new StreamReader(fileName)){
retVal=(T)mySerializer.Deserialize(myWriter);
}
return retVal;
}
}