目次

(追記) (追記ここまで)

概要

System.IO 名前空間以下に、ディレクトリ(フォルダ)・ファイルの作成・読み書き等を行うためのクラスが用意されています。

ファイル操作などの処理は、 オブジェクト指向言語との相性もいいですし、 C# の 「foreach 文」 や 「LINQ」 との親和性も高いので、 C# でのファイル操作の楽さには目を見張るものがあります。

Directory, File

System.IO.Directory と System.IO.File には、 ディレクトリやファイルを読み書きするための static メソッドがあります。

using System;
using System.IO;
class TestIO
{
 static void Main()
 {
 if(!Directory.Exists("test"))
 Directory.CreateDirectory("test");
 
 for(int i=0; i<5; ++i)
 {
 string fileName = string.Format(@"test\{0}.txt", i);
 string contents = string.Format("Test file No. {0}", i);
 File.WriteAllText(fileName, contents);
 }
 }
}

プログラムを実行した後のディレクトリ内の様子です。

> ls
ConsoleApplication2.exe ConsoleApplication2.vshost.exe
ConsoleApplication2.pdb test
> cd test
> ls
0.txt 1.txt 2.txt 3.txt 4.txt
> cat 1.txt
Test file No. 1

DirectoryInfo, FileInfo

System.IO.DirectoryInfo と System.IO.FileInfo は、 ディレクトリやファイルの情報を取り出すためのクラスです。

using System;
using System.IO;
class TestRexex
{
 static void Main()
 {
 DirectoryInfo dir = new DirectoryInfo("test");
 foreach(FileInfo f in dir.GetFiles())
 {
 string name = f.Name;
 string ext = f.Extension;
 DateTime t = f.CreationTime;
 Console.Write("{0}\next: {1}, time: {2}\n",
 name, ext, t.ToString("hh:mm:ss"));
 }
 }
 }
}
0.txt
ext: .txt, time: 02:34:36
1.txt
ext: .txt, time: 02:34:36
2.txt
ext: .txt, time: 02:34:36
3.txt
ext: .txt, time: 02:34:36
4.txt
ext: .txt, time: 02:34:36

StreamReader, StreamWriter

System.IO.StreamReader, System.IO.StreamWriter を用いることで、 テキストファイルの読み書きができます。

using System;
using System.IO;
class TestRexex
{
 static void Main()
 {
 // ファイルにテキストを書き出し。
 using(StreamWriter w = new StreamWriter(@"test\test.txt"))
 {
 w.WriteLine("基本的に、Console クラスの文字列出力メソッドと同じ。");
 w.WriteLine("WriteLine では末尾に改行文字が加えられます。");
 int n = 5;
 double x = 3.14;
 w.Write("書式指定出力もできます → n = {0}, x = {1}", n, x);
 }
 // ファイルからテキストを読み出し。
 using(StreamReader r = new StreamReader(@"test\test.txt"))
 {
 string line;
 while( (line = r.ReadLine()) != null) // 1行ずつ読み出し。
 {
 Console.WriteLine(line);
 }
 }
 }
}
基本的に、Console クラスの文字列出力メソッドと同じ。
WriteLine では末尾に改行文字が加えられます。
書式指定出力もできます → n = 5, x = 3.14

BinaryReader, BinaryWriter

バイナリ形式での読み書きには、 System.IO.BinaryReader, System.IO.BinaryWriter クラスを用います。

using System;
using System.IO;
class TestRexex
{
 static void Main()
 {
 // バイナリ形式でファイルに書き出し。
 using(BinaryWriter w = new BinaryWriter(File.OpenWrite(@"test\binary")))
 {
 w.Write(new byte[]{(byte)0x01, (byte)0x23, (byte)0x45, (byte)0x67, });
 w.Write((int)123456789);
 w.Write((float)3.14159);
 }
 // 1バイトずつ読み出し。
 using(BinaryReader w = new BinaryReader(File.OpenRead(@"test\binary")))
 {
 try
 {
 for(;;)
 Console.Write("{0:x2}", w.ReadByte());
 }
 catch(EndOfStreamException)
 {
 Console.Write("\n");
 }
 }
 // 書き出したときと同じ手順で読み出し。
 using(BinaryReader w = new BinaryReader(File.OpenRead(@"test\binary")))
 {
 Console.Write("{0:x2}, ", w.ReadByte());
 Console.Write("{0:x2}, ", w.ReadByte());
 Console.Write("{0:x2}, ", w.ReadByte());
 Console.Write("{0:x2}\n", w.ReadByte());
 Console.Write("{0:d}\n", w.ReadInt32());
 Console.Write("{0:g}\n", w.ReadSingle());
 }
 }
}
0123456715cd5b07d00f4940
01, 23, 45, 67
123456789
3.14159

更新履歴

ブログ


誤字等を見つけた場合や、ご意見・ご要望がございましたら、GitHub の Issues まで気兼ねなくご連絡ください。
(追記) (追記ここまで)
(追記) (追記ここまで)
(追記) (追記ここまで)
(追記) (追記ここまで)
(追記) (追記ここまで)
(追記) (追記ここまで)

AltStyle によって変換されたページ (->オリジナル) /