C#でプログラムを作成するときに、ちょっとした設定値を保存したり、読み込んだりするクラスを毎回作成したり、思い出したりするのが大変なので、メモ程度に残しておきたいと思います。
Contents
スポンサーリンク
XMLファイルの読み込み、書き込みクラス
XMLファイルの簡単な読み込み、書き込みクラスについて、下記に記載します。
処理概要
■ファイル読み込み
- 指定したXMLファイルパスのデータを読み込む。
- 読み込んだデータをクラスデータとして取得する。
- ファイルの存在確認をする。
- XMLデータとクラス構成は、一致していること。
■ファイル書き込み
- 指定されたクラスのデータ形式で、XMLファイルを作成する。
- 指定したパスにXMLファイルを作成する。
- 指定したファイルパスについて、フォルダが存在しない場合は、フォルダを作成する。
プログラム
XMLファイルの読み書きクラスについて、プログラムを以下に記載いたします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | using System; using System.IO; /// <summary> /// ファイル読み書き処理(XML) /// </summary> public class XmlReadWrite { //定数 public const int TRUE = 0; public const int FALSE = -1; public const int ERROR_FILE_NOT_EXIST = -2; //ファイル存在無しエラー public const int ERROR_FILE_READ = -3; //ファイル読込エラー public const int ERROR_FILE_WRITE = -4; //ファイル書込みエラー /// <summary> /// ファイル読込処理 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="ReadData"></param> /// <returns></returns> public int ReadXml<T>( ref T ReadData, string path) { int ret = TRUE; if (File.Exists(path)) { try { //保存した内容を復元する System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer( typeof (T)); using (System.IO.StreamReader sr = new System.IO.StreamReader( path, new System.Text.UTF8Encoding( false ))) { ReadData = (T)serializer.Deserialize(sr); } } catch { ret = ERROR_FILE_READ; } } else { ret = ERROR_FILE_NOT_EXIST; } return ret; } /// <summary> /// ファイル書込み処理 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="WriteData"></param> /// <param name="path"></param> /// <returns></returns> public int WriteXml<T>(T WriteData, string path) { int ret = TRUE; try { //保存先フォルダの存在確認 if (!Directory.Exists(Path.GetDirectoryName(path))) { //存在しない場合フォルダ作成 Directory.CreateDirectory(Path.GetDirectoryName(path)); } //XMLファイルに保存する System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer( typeof (T)); using (System.IO.StreamWriter sw = new System.IO.StreamWriter( path, false , new System.Text.UTF8Encoding( false ))) { serializer.Serialize(sw, WriteData); } } catch (Exception e) { ret = ERROR_FILE_WRITE; } return ret; } } |
使用方法
作成したクラスの簡単な使用方法を以下に記載いたします。
今回は、個人情報クラスを作成して、クラスデータをXMLファイルに保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | /// <summary> /// 個人情報 /// </summary> public class PrivateInformation { public string name { get ; set ; } public string address { get ; set ; } public string tel { get ; set ; } } /// <summary> /// ファイル読み込み /// </summary> /// <param name="filepath">読込ファイルパス</param> private void ReadPrivateInfo( string filepath) { PrivateInformation pi = new PrivateInformation(); XmlReadWrite xrw = new XmlReadWrite(); int ret = xrw.ReadXml( ref pi, filepath); if (ret == 0) { Console.WriteLine($ "名前:{pi.name}" ); Console.WriteLine($ "住所:{pi.address}" ); Console.WriteLine($ "電話番号:{pi.tel}" ); } else { Console.WriteLine($ "エラー:[{ret}]" ); } } /// <summary> /// ファイル書き込み /// </summary> /// <param name="filepath">書き込みファイルパス</param> private void WritePrivateInfo( string filepath) { PrivateInformation pi = new PrivateInformation(); pi.name = "たま" ; pi.address = "にっぽん" ; pi.tel = "0101-2020-3030" ; XmlReadWrite xrw = new XmlReadWrite(); int ret = xrw.WriteXml(pi, filepath); if (ret < 0) { Console.WriteLine($ "エラー:[{ret}]" ); } } |
上記でXMLファイルを作成すると、以下のような内容のファイルが作成されます。
1 2 3 4 5 6 | <? xml version = "1.0" encoding = "utf-8" ?> < PrivateInformation xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd = "http://www.w3.org/2001/XMLSchema" > < name >たま</ name > < address >にっぽん</ address > < tel >0101-2020-3030</ tel > </ PrivateInformation > |
使用したクラス名とクラス変数が、そのままXMLのタグになってくれるので、ちょっとした設定を保存するには、とても便利です。
スポンサーリンク