■83221 / inTopicNo.1) |
書き込まれたXMLファイルに要素がない |
□投稿者/ りんご味 (1回)-(2017/03/13(Mon) 17:55:07)
|
分類:[C#]
visual studioにて
http://ufcpp.net/study/algorithm/col_blist.html
と
http://dobon.net/vb/dotnet/programing/storeappsettings.html
の「XMLファイルに保存する」の項を参考に双方向連結リスト2つをXMLファイルにシリアル化して
書き込もうとしているのですが、書き込まれるのは要素が全く書き込まれていないXMLファイルしかできません。
ご教授いただければ幸いです。
双方向連結リストはURLのものに加えてint型numという分類ナンバーのようなものを加えています。
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public LinkedList list1 = new LinkedList();
public LinkedList list2 = new LinkedList();
private void Form1_Load(object sender, EventArgs e)
{
public LinkedList list1 = new LinkedList();
public LinkedList list2 = new LinkedList();
private void Form1_Load(object sender, EventArgs e)
{
listBox1.Items.Add(list1.InsertLast("すべて",0).Value);
listBox1.Items.Add(list1.InsertLast("種類1",1).Value);
listBox1.Items.Add(list1.InsertLast("種類2",2).Value);
listBox1.Items.Add(list1.InsertLast("種類3",3).Value);
listBox1.Items.Add(list1.InsertLast("種類4",4).Value);
listBox1.Items.Add(list1.InsertLast("種類5",5).Value);
listBox1.Items.Add(list1.InsertLast("種類6",6).Value);
listBox1.Items.Add(list1.InsertLast("種類7",7).Value);
listBox2.Items.Add(list2.InsertLast("名前1", 4).Value);
listBox2.Items.Add(list2.InsertLast("名前2", 5).Value);
listBox2.Items.Add(list2.InsertLast("名前3", 7).Value);
listBox2.Items.Add(list2.InsertLast("名前4", 1).Value);
listBox2.Items.Add(list2.InsertLast("名前5", 2).Value);
listBox2.Items.Add(list2.InsertLast("名前6", 3).Value);
listBox2.Items.Add(list2.InsertLast("名前7", 6).Value);
}
//ファイル保存部分
private void button1_Click(object sender, EventArgs e)
{
System.Xml.Serialization.XmlSerializer serializer1 =
new System.Xml.Serialization.XmlSerializer(typeof(LinkedList));
System.IO.StreamWriter sw1 = new System.IO.StreamWriter(
"App1.config", false, new UTF8Encoding(false));
serializer1.Serialize(sw1, list1);
sw1.Close();
System.Xml.Serialization.XmlSerializer serializer2 =
new System.Xml.Serialization.XmlSerializer(typeof(LinkedList));
System.IO.StreamWriter sw2 = new System.IO.StreamWriter(
"App2.config", false, new UTF8Encoding(false));
serializer2.Serialize(sw2, list2);
sw2.Close();
}
//ファイル書き込み部分
private void button2_Click(object sender, EventArgs e)
{
System.Xml.Serialization.XmlSerializer serializer1 =
new System.Xml.Serialization.XmlSerializer(typeof(LinkedList));
System.IO.StreamReader sr1 = new System.IO.StreamReader(
"App1.config", new UTF8Encoding(false));
LinkedList obj1 = (LinkedList)serializer1.Deserialize(sr1);
sr1.Close();
System.Xml.Serialization.XmlSerializer serializer2 =
new System.Xml.Serialization.XmlSerializer(typeof(LinkedList));
System.IO.StreamReader sr2 = new System.IO.StreamReader(
"App2.config", new UTF8Encoding(false));
LinkedList obj2 = (LinkedList)serializer2.Deserialize(sr2);
sr2.Close();
listBox1.Items.Clear();
listBox2.Items.Clear();
LinkedList.Node n = list1.First;
LinkedList.Node m = list2.First;
while(n==list1.Last.Next)
{
listBox1.Items.Add(n);
n = n.Next;
}
while (m == list2.Last.Next)
{
listBox1.Items.Add(m);
m = m.Next;
}
}
//使用している双方向連結リストLinkedListクラス
public class LinkedList
{
public class Node
{
#region フィールド
string val;
int num;
Node prev;
Node next;
internal Node(string val, int num, Node prev, Node next)
{
this.val = val;
this.num = num;
this.prev = prev;
this.next = next;
}
public string Value
{
get { return this.val; }
set { this.val = value; }
}
public int Num
{
get { return this.num; }
set { this.num = value; }
}
public Node Next
{
get { return this.next; }
internal set { this.next = value; }
}
public Node Previous
{
get { return this.prev; }
internal set { this.prev = value; }
}
}
Node dummy;
public LinkedList()
{
this.dummy = new Node(null, -1, null, null);
this.dummy.Next = this.dummy;
this.dummy.Previous = this.dummy;
}
public Node First
{
get { return this.dummy.Next; }
}
public Node Last
{
get { return this.dummy.Previous; }
}
public Node End
{
get { return this.dummy; }
}
public int Count
{
get
{
int i = 0;
for (Node n = this.First; n != this.End; n = n.Next)
++i;
return i;
}
}
public Node InsertAfter(Node n, string elem, int num)
{
Node m = new Node(elem, num, n, n.Next);
n.Next.Previous = m;
n.Next = m;
return m;
}
public Node InsertBefore(Node n, string elem, int num)
{
Node m = new Node(elem, num, n.Previous, n);
n.Previous.Next = m;
n.Previous = m;
return m;
}
public Node InsertFirst(string elem, int num)
{
return this.InsertAfter(this.dummy, elem, num);
}
public Node InsertLast(string elem, int num)
{
return this.InsertBefore(this.dummy, elem, num);
}
public Node Erase(Node n)
{
if (n == this.dummy)
{
return this.dummy;
}
n.Previous.Next = n.Next;
n.Next.Previous = n.Previous;
return n.Next;
}
public void EraseFirst()
{
this.Erase(this.First);
}
public void EraseLast()
{
this.Erase(this.Last);
}
}
書き込まれたXMLファイル(App1.config,App2.configどちらも)
<?xml version="1.0" encoding="utf-8"?>
<LinkedList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
|
|