C#でプログラムを作成するときに、ちょっとした設定値を保存したり、読み込んだりするクラスを毎回作成したり、思い出したりするのが大変なので、メモ程度に残しておきたいと思います。
Contents
スポンサーリンク
XMLファイルの読み込み、書き込みクラス
XMLファイルの簡単な読み込み、書き込みクラスについて、下記に記載します。
処理概要
■ファイル読み込み
- 指定したXMLファイルパスのデータを読み込む。
- 読み込んだデータをクラスデータとして取得する。
- ファイルの存在確認をする。
- XMLデータとクラス構成は、一致していること。
■ファイル書き込み
- 指定されたクラスのデータ形式で、XMLファイルを作成する。
- 指定したパスにXMLファイルを作成する。
- 指定したファイルパスについて、フォルダが存在しない場合は、フォルダを作成する。
プログラム
XMLファイルの読み書きクラスについて、プログラムを以下に記載いたします。
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ファイルに保存します。
/// <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ファイルを作成すると、以下のような内容のファイルが作成されます。
<?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のタグになってくれるので、ちょっとした設定を保存するには、とても便利です。
スポンサーリンク