トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

unity_file_read_write

ファイル入出力

ファイル入出力は、C#の標準的な機能で実装できる。

要 : using System.IO;

 ファイル書き出し

FileStream f = new FileStream("test.txt", FileMode.Create, FileAccess.Write);
BinaryWriter writer = new BinaryWriter(f);
writer.Write(100);
writer.Write(0.5);
writer.Write("test");
writer.Close();

Unityの対象プロジェクトの直下に「test.txt」を出力。
この場合は順番に、int型/double型/文字列型のデータを出力します。
BinaryWriterを使用すると、テキストだけを出力してもバイナリ形式のファイルになります。

Unityのプロジェクトでは「Assets」フォルダ内に関係するデータが入るので、
"Assets/test.txt"のようなパスを指定したほうがよいかもしれません。

 ファイルの存在をチェック


ファイルの存在確認は「File.Exists」関数を使用します。

if (File.Exists("test.txt")) {
    // ファイルが存在する.
}

 ファイル読み込み

FileStream f = new FileStream("test.txt", FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(f);
if (reader != null) {
    int iVal    = reader.ReadInt32();
    double dVal = reader.ReadDouble();
    string str  = reader.ReadString();
    reader.Close();
}

Unityの対象プロジェクト直下の「test.txt」から情報を読み込みます。
出力した順番の型で読み込んでます。

注意点として、float型を保存して読み込むような場合には

float fDat = 0.5f;
writer.Write((double)fDat);

のようにキャストしてdoubleとして格納。読み込み時に

float fDat = (float)reader.ReadDouble();

のようにdoubleデータとして読み込んだ後にfloatにキャスト。
のようにしないと、「writer.Write(fDat);」ではfloatとして格納、「reader.ReadDouble();」はdoubleとして読み込み、となってしまい、読み込むデータがずれてしまいます。

 任意のテキストを書き出し

要 : using System.IO;
     using System.Text;

「StreamWriter」を使用することで、テキストを出力できます。

FileStream f = new FileStream("test.txt", FileMode.Create, FileAccess.Write);
Encoding sjisEnc    = Encoding.GetEncoding("Shift_JIS");
StreamWriter writer = new StreamWriter(f, sjisEnc);
writer.WriteLine("Line1");
writer.WriteLine("Line2");
writer.WriteLine("Line3");
writer.Close();

この場合は、ShiftJISで3行のテキストを出力してます。「Encoding.GetEncoding("UTF-8")」とするとUTF-8での出力になります。
これは普通のテキストファイルになります。

 追加でテキストを書き出し

要 : using System.IO;
     using System.Text;

ログを1つのファイルに出力する場合などには、FileStream生成時に第二引数で「FileMode.Append」を指定します。

FileStream f = new FileStream("logfile.txt", FileMode.Append, FileAccess.Write);
Encoding utf8Enc = Encoding.GetEncoding("UTF-8");
StreamWriter writer = new StreamWriter(f, utf8Enc);
writer.WriteLine("Line1");
writer.WriteLine("Line2");
writer.Close();

この場合は、何回か上記の処理を呼ぶと上書きではなく、追加でテキストファイル末尾に新しいテキストが追加されます。

 任意のテキストを読み込み

「StreamReader」を使用することで、テキストを読み込めます。

FileStream f = new FileStream("test.txt", FileMode.Open, FileAccess.Read);
StreamReader reader = new StreamReader(f);
if (reader != null) {
  while (!reader.EndOfStream) {
    string str = reader.ReadLine();
    print (str);
  }
  reader.Close();
}

「reader.EndOfStream」でファイル終端の判断、「reader.ReadLine」で1行のテキストを読み込みます。


最終更新時間:2014年06月10日 16時08分00秒