2008-10-27 9 views
1

Voici l'histoire. Je faisais un programme, chaque fois que le programme est fermé, toutes les données créées par l'utilisateur sont perdues, donc chaque fois que l'utilisateur rouvre le programme, il doit refaire tout le travail. J'ai donc décidé d'utiliser un fichier xml pour stocker les données, car un dbms serait trop long à charger et le code pour gérer un fichier en texte brut serait difficile à maintenir. Les données sont principalement composées de liens qui stockent deux chemins de fichier, un pour l'origine et un pour la destination, un booléen qui représente l'état du lien avant la fermeture du programme, et quelques autres choses moins importantes. Lorsque le programme charge les données doivent être lues en restaurant l'état précédent de l'applicationComment écrire une datarow dans un fichier xml

Je fait un fichier xml comme ceci:

... 
    <Directories> 
    <Directory id="0"> 
     <FilePath>C:\Test1</FilePath> 
     <PathSeparator>\</PathSeparator> 
    </Directory> 
... 

et a utilisé un DataSet pour obtenir les données.

Directory getDirectory() 
{ 
    ds = new DataSet(); 
       ds.ReadXml(xmlPath); 
    DataRow[] myRow = ds.Tables["Directory"]. 
       Select("id ="+id.ToString());// "id = id" 
    string temp = myRow[0]["FilePath"].ToString(); 
    Directory result = new Directory(); 
    result.path = temp; 
    temp = myRow[0]["PathSeparator"].ToString(); 
    result.pathSeparator = temp[0]; 
    return result; 
} 

Tout ce qui fonctionne très bien, mais j'ai essayé d'ajouter de nouvelles « lignes » au xml:

public static int addDirectory(DataSet ds, char pathSeparator, string path) 
{ 
    DataRow myRow = ds.Tables["Directory"].NewRow(); 
    myRow.ItemArray[0] = 8; 
    myRow.ItemArray[1] = path; 
    myRow.ItemArray[2] = pathSeparator.ToString(); 
    myRow.ItemArray[3] = "lol"; 
    ds.Tables["Directory"].Rows.Add(myRow); 
    ds.AcceptChanges(); 
    ds.WriteXml(ApplicationDataManager.xmlPath); 
    return 8; 
} 

Mais tout cela est écrit à un endroit aléatoire sur la .xml

Qu'est-ce que je fais mal? Par ailleurs si quelqu'un a des suggestions sur la façon dont je devrais stocker ces données, je serais heureux d'entendre (lire).

Merci d'avance! Les liens de fichier sont utilisés pour créer une connexion entre deux répertoires, afin qu'ils puissent être synchronisés.

+0

"chaque fois que le programme est fermé toutes les données (liens de fichier) créés par l'utilisateur sont perdues," vous devriez résoudre ce problème, quittez le décodage avec XML. Que voulez-vous dire "les données créées par l'utilisateur est perdu"? C'est ce qui est important. –

+0

S.Lott, c'est exactement ce que j'essaie de résoudre en «tripatouillant XML», le programme n'est pas obligé de stocker l'état des sessions précédentes, y compris tous les liens. Bien qu'en ne stockant pas de liens, l'utilisateur devra recréer tous les liens qu'il a déjà créés. – Diones

+0

qu'en est-il du stockage isolé? –

Répondre

3

Si LINQ est dans votre boîte à outils, je recommande fortement d'utiliser cela pour lire/écrire xml par opposition à un DataTable. Il est beaucoup plus fluide et intuitif et vous pouvez contrôler où les nœuds vont ... partout où vous les ajoutez à la collection est où ils apparaissent dans le XML résultant.

est ici une introduction rapide et il y a une tonne d'informations là-bas sur le web à ce sujet si vous recherchez un peu: http://www.hookedonlinq.com/LINQtoXML5MinuteOverview.ashx

+0

Travailler avec DataSets est une méthode plutôt lourde - utiliser Linq XElement et les amis vous donneront beaucoup plus de contrôle, et vous pourrez peut-être exploiter les objets que vous utilisez déjà en interne. – Bevan

0

Votre meilleure option si vous voulez un moyen rapide et sale est de charger les utilisateurs informations dans l'ensemble de données, appelez la méthode "WriteXml" pour enregistrer et utiliser "ReadXml" pour le retirer. Le format XML que le DataSet utilise seul entrera et sortira dans le même format.

Vous avez également beaucoup d'autres options, mais le DataSet est la manière la plus rapide et la plus sale de le faire.

Questions connexes