###発生している問題・エラーメッセージ
ディレクトリ下にあるファイル名(rtf)を列挙 (button1)
┗「Data」フォルダ以下に Form1.rtf ~ Form4.rtf までを用意
上記で取得したファイル名をXMLとして保存 (button2)
という処理の流れで、最後に取得したファイル名のみ反映され、出力結果が <FileName>Form4.rtf</FileName> のみとなってしまいます。
上書きされてしまうようですが、正常に反映させる方法が分かりません。
参考にした記事
C#で付箋紙を作る(第三回目) XMLファイルからパラメーターを読み込んで反映する
関連のある質問
ListにAddする再、何故か全てのデータがAddしたデータに上書きされてしまいます。
###該当のソースコード
C#
1 2 private void Form1_Load(object sender, EventArgs e) 3 { 4 setCurrent = Directory.GetCurrentDirectory(); 5 6 } 7 8 9 10 /// <summary> 11 /// //カレントディレクトリ下にある”Data”フォルダ内のファイル名を列挙 12 /// </summary> 13 string setCurrent; 14 static StickyList SL; 15 static StickyData SD; 16 private void button1_Click(object sender, EventArgs e) 17 { 18 SD = new StickyData(); 19 SL = new StickyList(); 20 SL.DataList = new List<StickyData>(); 21 ///インスタンス化 22 23 string[] files = Directory.GetFiles(setCurrent +"\\Data\\", "*.rtf", SearchOption.TopDirectoryOnly); 24 //”Data”フォルダ下のフルパスを取得 25 26 foreach (string filename in files) 27 { 28 string s = Path.GetFileName(filename); 29 //フルパスをファイル名に変換 30 31 32 SD.FileName = s; 33 34 SL.DataList.Add(SD); //この時点で、SD内にはForm4.rtfしか存在しない 35 //上書きされる 36 37 listBox1.Items.Add(SD.FileName); //結果のプレビュー 38 39 40 41 } 42 43 } 44 45 private void button2_Click(object sender, EventArgs e) 46 { 47 48 49 var serializer = new XmlSerializer(typeof(StickyList)); 50 //XMLシリアライズクラスを初期化(インスタンス化) 51 52 53 var sw = new StreamWriter(@"Sticky.xml", false, new UTF8Encoding(false)); 54 serializer.Serialize(sw, SL); 55 //シリアライズして書き込む 56 57 sw.Close(); 58 } 59 60 #region ジェネリッククラス 61 62 /// <summary> 63 /// XMLとして保存するクラス 64 /// </summary> 65 [XmlRoot("Sticky")] 66 public class StickyData 67 { 68 [XmlElement("FileName")] 69 public string FileName { get; set; } 70 } 71 72 /// <summary> 73 /// StickyDataをジェネリックリスト化するクラス 74 /// </summary> 75 [XmlRoot("Stickys")] 76 public class StickyList 77 { 78 [XmlElement("Sticky")] 79 public List<StickyData> DataList { get; set; } 80 } 81 82 #endregion 83
###出力結果
<?xml version="1.0" encoding="utf-8"?> <Stickys xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Sticky> <FileName>Form4.rtf</FileName> </Sticky> <Sticky> <FileName>Form4.rtf</FileName> </Sticky> <Sticky> <FileName>Form4.rtf</FileName> </Sticky> <Sticky> <FileName>Form4.rtf</FileName> </Sticky> </Stickys>###補足情報(言語/FW/ツール等のバージョンなど)
listbox1内の出力は正常でした。
変数
SLがbutton1 クリック時にFileName”Form4”の重複が見られました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/14 11:09