Как записать данные в XML-файл - PullRequest
1 голос
/ 27 октября 2008

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

Поэтому я решил использовать xml-файл для хранения данных, потому что dbms загружался слишком долго, а код для обработки простого текстового файла было бы трудно поддерживать.

Данные в основном состоят из ссылок, в которых хранятся два пути к файлам: один для источника и один для пункта назначения, один логический тип, представляющий состояние ссылки до закрытия программы, и несколько других менее важных вещей.

Когда программа загружает данные должны быть прочитаны, восстанавливая предыдущее состояние приложения.

Итак, я сделал xml-файл примерно так:

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

И использовал DataSet для получения данных.

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;
}

Все это прекрасно работает, но затем я попытался добавить новые "строки" в 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;
}

Но все это пишет в случайное место на .xml

Что я делаю не так?

Кстати, если у кого-то есть какие-либо предложения о том, как мне хранить эти данные, я был бы рад услышать (прочитать).

Заранее спасибо!

[Update] Ссылки на файлы используются для создания соединения между двумя каталогами, поэтому их можно синхронизировать.

Ответы [ 2 ]

3 голосов
/ 27 октября 2008

Если в вашем наборе инструментов есть LINQ, я настоятельно рекомендую использовать его для чтения / записи XML, а не для DataTable. Это намного более свободно и интуитивно понятно, и вы можете контролировать, куда переходят узлы ... куда бы вы ни добавили их в коллекцию, они будут отображаться в итоговом XML.

Вот краткое введение, и в сети есть метрическая тонна информации об этом, если вы будете искать немного: http://www.hookedonlinq.com/LINQtoXML5MinuteOverview.ashx

0 голосов
/ 27 октября 2008

Если вы хотите использовать быстрый и грязный способ, лучше всего загрузить информацию о пользователях в набор данных, вызвать метод «WriteXml» для сохранения и использовать «ReadXml», чтобы вернуть его обратно. Формат XML, который использует DataSet сам по себе будет входить и выходить в том же формате.

У вас также есть много других опций, но DataSet - самый быстрый и грязный способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...