トップ 一覧 検索 ヘルプ 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 Ststem.Text;
      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行のテキストを読み込みます。
----
{{lastmodified}}