■ System.IO 名前空間のオブジェクトの利用 ■ System.IO 名前空間には、ファイルとデータストリームの読み取りと書き込みを可能にする為の型、及 び、ファイルとディレクトリに関する基本的なサポートを提供する型が含まれて居る。 ■ System.IO 名前空間のメンバ クラス クラス 説明 BinaryReader プリミティブ データ型を特定のエンコーディングのバイナリ 値と仕て読み取る。 BinaryWriter プリミティブ型をバイナリでストリームに書き込む。特定のエ ンコーディングの文字列の書き込みをサポートする。 BufferedStream 他のストリームに対する読み取り操作、及び、書き込み操作に バッファリング層を追加する。 Directory ディレクトリやサブディレクトリを通じて、作成、移動、及び 列挙する為の静的メソッドを公開する。 DirectoryInfo ディレクトリとサブディレクトリを作成、削除、及び列挙する 為のインスタンスメソッドを公開する。 DirectoryNotFoundException ファイル、又は、ディレクトリの一部が見付からない場合にス ローされる例外。 DriveInfo ドライブに関する情報へのアクセスを提供する。 DriveNotFoundException 使用出来ないドライブ、又は、共有にアクセスしようとすると スローされる例外。 EndOfStreamException ストリームの末尾を越えて読み込もうと仕た時にスローされる 例外。 ErrorEventArgs Error イベントのデータを提供する。 File ファイルの作成、コピー、削除、移動、オープンの為の静的メ ソッドを提供し、FileStream オブジェクトの作成を支援する。 FileInfo ファイルを作成、コピー、削除、移動、オープンの為のインス タンスメソッドを提供し、FileStream オブジェクトを作成出来 る様にする。 FileLoadException マネージ アセンブリが見付かったが、読み込む事が出来ない場 合にスローされる例外。 FileNotFoundException ディスク上に存在しないファイルにアクセスしようと仕て失敗 した時にスローされる例外。 FileStream 同期、及び、非同期の読み取り操作と書き込み操作をサポート するファイル用のStream を公開する。 FileSystemEventArgs ディレクトリイベントの Changed、Created、Deleted にデー タを提供する。
FileSystemInfo FileInfo オブジェクトと DirectoryInfo オブジェクトの両方の 基本クラスを提供する。
フ
FileSystemWatcher ファイルシステムの変更通知を待機し、ディレクトリ、又は、 ディレクトリ内のファイルが変更された時にイベントを発生さ せる。 InternalBufferOverflowException 内部バッファがオーバーフローした場合にスローされる例外。 InvalidDataException データストリームが無効な形式で有る場合にスローされる例 外。 IODescriptionAttribute イベント、エクステンダ、又は、プロパティの参照時に、ビジ ュアルデザイナで表示出来る説明を設定する。 IOException I/O エラーが発生した時にスローされる例外。 MemoryStream バッキングストアとしてメモリを使用するストリームを作成す る。 Path ファイル、又は、ディレクトリのパス情報を格納するString イ ンスタンスで操作を実行する。此等の操作は、プラットフォー ム間で実行される。 PathTooLongException パス名、又は、ファイル名がシステム定義の最大長よりも長い 時にスローされる例外。 RenamedEventArgs Renamed イベントのデータを提供する。 Stream バイトシーケンスのジェネリックビューを提供する。 StreamReader 特 定 の エ ン コ ー デ ィ ン グ の バ イ ト ス ト リ ー ム を 読 み 込 む TextReader を実装する。 StreamWriter 文字を特定のエンコーディングでストリームに書き込む為の TextWriter を実装して居る。 StringReader 文字列から読み取るTextReader を実装する。 StringWriter 文字列に情報を書き込むTextWriter を実装する。情報は、基に 成るStringBuilder に格納される。 TextReader 一連の文字を読み取る事が出来るリーダーを表わす。 TextWriter 一連の文字を書き込む事が出来るライタを表わす。此のクラス は抽象クラスで有る。 UnmanagedMemoryStream マネージコードからメモリのアンマネージブロックにアクセス 出来る様にする。 構造体 構造体 説明 WaitForChangedResult 発生した変更に付いての情報を格納する。 デリゲート デリゲート 説明
ErrorEventHandler FileSystemWatcher オブジェクトの Error イベントを処理するメソッド を表わす。
FileSystemEventHandler FileSystemWatcher クラスの Changed イベント、Created イベント、 又は、Deleted イベントを処理するメソッドを表わす。
RenamedEventHandler FileSystemWatcher クラスの Renamed イベントを処理するメソッドを 表わす。
列挙体 説明 DriveType CDRom、Fixed、Network、NoRootDirectory、Ram、Removable、 Unknown 等、ドライブの種類を示す定数を定義する。 FileAccess ファイルへの読み取り、書き込み、又は、読み取り/書き込みアクセスを 示す定数を定義する。 FileAttributes ファイルとディレクトリに属性を提供する。 FileMode オペレーティングシステムがファイルを開く方法を指定する。 FileOptions FileStream オブジェクトを作成する為の追加オプションを表わす。 FileShare 同一のファイルに対して他の FileStream オブジェクトが保有出来るア クセスの種類を制御する定数を格納する。 NotifyFilters ファイル、又は、フォルダでウォッチする変更を指定する。 SearchOption 現在のディレクトリを検索するのか、又は、現在のディレクトリと総て のサブディレクトリを検索するのかを指定する。 SeekOrigin シークする時のストリームの参照ポイントを表すフィールドを提供す る。 WatcherChangeTypes ファイル、又は、ディレクトリに発生する可能性が有る変更。 ■ System.IO 名前空間のメンバの理手順 一般的なI/O タスク、又は、関連する I/O タスクの例を次の表に示す。 実行するタスク 参考例が有るトピック テキストファイルを作成する。 ファイルにテキストを書き込む テキストファイルに書き込む。 ファイルにテキストを書き込む テキストファイルから読み取る。 ファイルからテキストを読み取る テキストをファイルに追加する。 ログファイルを開いて情報を追加する File.AppendText FileInfo.AppendText ファイルのサイズを取得する。 FileInfo.Length ファイルの属性を取得する。 File.GetAttributes ファイルの属性を設定する。 File.SetAttributes ファイルが存在するか何うかを判別する。 File.Exists バイナリファイルから読み取る。 新しく作成されたデータファイルに対して読み書きする バイナリファイルに書き込む。 新しく作成されたデータファイルに対して読み書きする ■ StreamReader クラス 特定のエンコーディングのバイトストリームを読み込むTextReader を実装する。 名 前 空 間:System.IO アセンブリ:mscorlib (mscorlib.dll 内) ■ StreamReader オブジェクト 解説
StreamReader は、特定のエンコーディングの文字を入力する場合に使用する。一方、Stream クラス は、バイトの入出力に使用する。標準テキストファイルから情報の行を読み取るには、StreamReader を使用する。
他に指定が無い場合、現行システムでは StreamReader は ANSI コードページではなく、既定の UTF-8 エンコーディングに設定される。UTF-8 は、Unicode 文字を正しく処理し、オペレーティングシステム の各ローカライズバージョンで一貫した結果を提供する。
既 定 で は 、StreamReader は ス レ ッ ド セ ー フ で は 無 い 。 ス レ ッ ド セ ー フ ラ ッ パ ー に 付 い て は TextReader.Synchronized のトピックを参照され度い。
Read(Char[],Int32,Int32) メソッド、及び、Write(Char[],Int32,Int32) メソッドは、夫々れ、count パラメータで指定した文字数の読み込みと書き込みを行う。此等のメソッドは、count パラメータで指 定したバイト数の読み取りと書き込みを行うBufferedStream.Read や BufferedStream.Write とは区別 される。BufferedStream は、バイト配列の全要素の読み取りと書き込み丈に使用する。 メモ:Stream から読み取る時は、ストリームの内部バッファと同じサイズのバッファを使用すると効 率的で有る。 使用例 StreamReader オブジェクトを使用して、ファイルからテキストを読み取るコード例を次に示す。 Visual Basic Imports System Imports System.IO Class Test
Public Shared Sub Main() Try
' Create an instance of StreamReader to read from a file. Dim sr As StreamReader = New StreamReader("TestFile.txt") Dim line As String
' Read and display the lines from the file until the end ' of the file is reached.
Do
line = sr.ReadLine() Console.WriteLine(Line) Loop Until line Is Nothing sr.Close()
Catch E As Exception
' Let the user know what went wrong.
Console.WriteLine("The file could not be read:") Console.WriteLine(E.Message) End Try End Sub End Class C# using System; using System.IO; class Test {
public static void Main() {
try {
// Create an instance of StreamReader to read from a file. // The using statement also closes the StreamReader.
using (StreamReader sr = new StreamReader("TestFile.txt")) {
String line;
// Read and display lines from the file until the end of // the file is reached.
while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); } } } catch (Exception e) {
// Let the user know what went wrong.
Console.WriteLine("The file could not be read:"); Console.WriteLine(e.Message);
} } }
C++ using namespace System;
using namespace System::IO; int main()
{ try {
// Create an instance of StreamReader to read from a file. // The using statement also closes the StreamReader. StreamReader^ sr = gcnew StreamReader( "TestFile.txt" ); try
{
String^ line;
// Read and display lines from the file until the end of // the file is reached.
while ( line = sr->ReadLine() ) { Console::WriteLine( line ); } } finally { if ( sr ) delete (IDisposable^)sr; } } catch ( Exception^ e ) {
Console::WriteLine( "The file could not be read:" ); Console::WriteLine( e->Message ); } } ■ StreamReader オブジェクトのコンストラクタ 指定したストリーム用のStreamReader クラスの新しいインスタンスを初期化する。 オーバーロードの一覧 名前 説明
StreamReader (Stream) 指定したストリーム用の StreamReader クラ スの新しいインスタンスを初期化する。 StreamReader (String) 指定したファイル名用の StreamReader クラ
スの新しいインスタンスを初期化する。 StreamReader (Stream, Boolean) バイト順マーク検出オプションを設定して、指
定したストリーム用の StreamReader クラス の新しいインスタンスを初期化する。
StreamReader (Stream, Encoding) 文字エンコーディングを設定して、指定したス トリーム用の StreamReader クラスの新しい インスタンスを初期化する。
StreamReader (String, Boolean) 指定したバイト順マーク検出オプションを使 用 し て 、 指 定 し た フ ァ イ ル 名 用 の StreamReader クラスの新しいインスタンス を初期化する。
StreamReader (String, Encoding) 文字エンコーディングを設定して、指定したフ ァイル名用の StreamReader クラスの新しい インスタンスを初期化する。
StreamReader (Stream, Encoding, Boolean) 文字エンコーディングとバイト順マーク検出 オプションを設定して、指定したストリーム用 の StreamReader クラスの新しいインスタン スを初期化する。
StreamReader (String, Encoding, Boolean) 文字エンコーディングとバイト順マーク検出 オプションを設定して、指定したファイル名用 の StreamReader クラスの新しいインスタン スを初期化する。
StreamReader (Stream, Encoding, Boolean, Int32) 文字エンコーディング、バイト順マーク検出オ プション、及び、バッファ サイズを設定して、 指定したストリーム用の StreamReader クラ スの新しいインスタンスを初期化する。 StreamReader (String, Encoding, Boolean, Int32) 文字エンコーディング、バイト順マーク検出オ
プション、及び、バッファ サイズを設定して、 指定したファイル名の StreamReader クラス の新しいインスタンスを初期化する。 ■ StreamReader オブジェクトのメンバ プロパティ 名前 説明
BaseStream 基に成るストリームを返す。 CurrentEncoding 現在の StreamReader オブジェクトが使用して居る現在の文字エンコーディング を取得する。 EndOfStream 現在のストリームの位置がストリームの末尾か何うかを示す値を取得する。 メソッド 名前 説明 Close オーバーライドされる。StreamReader オブジェクトと、其の基に成るス トリームを閉じ、リーダーに関連付けられた総てのシステムリソースを解 放する。 CreateObjRef リモートオブジェクトとの通信に使用するプロキシの生成に必要な情報 を総て格納して居るオブジェクトを作成する。 DiscardBufferedData StreamReader オブジェクトが、現在のデータを破棄出来る様にする。 Dispose Equals 2 つの Object インスタンスが等しいか何うかを判断する。 GetHashCode 特定の型のハッシュ関数として機能する。GetHashCode は、ハッシュア ルゴリズムや、ハッシュテーブルの様なデータ構造での使用に適して居 る。 GetLifetimeService 対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サー ビスオブジェクトを取得する。 GetType 現在のインスタンスのType を取得する。 InitializeLifetimeService 対象のインスタンスの有効期間ポリシーを制御する、有効期間サービスオ ブジェクトを取得する。 Peek オーバーライドされる。読み取り可能な次の文字を返すが、其の文字は使 用されない。 Read オーバーライドされる。入力ストリームから次の文字、又は、次の文字セ ットを読み込む。 ReadBlock 現在のストリームから最大 count 文字を読み取り、読み取った文字を index を開始位置として buffer に書き込む。 ReadLine オーバーライドされる。現在のストリームから1 行分の文字を読み取り、 其のデータを文字列として返す。 ReadToEnd オーバーライドされる。ストリームの現在位置から末尾迄を読み込む。 ReferenceEquals 指定した複数のObject インスタンスが同一か何うかを判断する。 Synchronized 指定したTextReader をラップするスレッドセーフラッパーを作成する。 ToString 現在のObject を表す String を返す。
■ ファイルからテキストを読み取る テキストファイルからテキストを読み取る方法を次のコード例に示す。2 番目の例では、ファイルの末 尾が検出された時に通知する。此の機能は、ReadAll メソッド、又は、ReadAllText メソッドを使用し て実行する事も出来る。 使用例 Visual Basic Imports System Imports System.IO
Class Test
Public Shared Sub Main() Try
' Create an instance of StreamReader to read from a file.
Using sr As StreamReader = New StreamReader("TestFile.txt") Dim line As String
' Read and display the lines from the file until the end ' of the file is reached.
Do
line = sr.ReadLine() Console.WriteLine(Line) Loop Until line Is Nothing sr.Close()
End Using Catch E As Exception
' Let the user know what went wrong.
Console.WriteLine("The file could not be read:") Console.WriteLine(E.Message) End Try End Sub End Class Option Explicit On Option Strict On Imports System Imports System.IO
Public Class TextFromFile
Private Const FILE_NAME As String = "MyFile.txt" Public Shared Sub Main()
If Not File.Exists(FILE_NAME) Then
Console.WriteLine("{0} does not exist.", FILE_NAME) Return
End If
Using sr As StreamReader = File.OpenText(FILE_NAME) Dim input As String
input = sr.ReadLine() While Not input Is Nothing Console.WriteLine(input) input = sr.ReadLine() End While
Console.WriteLine("The end of the stream has been reached.") sr.Close() End Using End Sub End Class C# using System; using System.IO; class Test {
public static void Main() {
try {
// Create an instance of StreamReader to read from a file. // The using statement also closes the StreamReader.
using (StreamReader sr = new StreamReader("TestFile.txt")) {
String line;
// Read and display lines from the file until the end of // the file is reached.
while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); } } } catch (Exception e) {
// Let the user know what went wrong.
Console.WriteLine("The file could not be read:"); Console.WriteLine(e.Message); } } } using System; using System.IO;
public class TextFromFile {
private const string FILE_NAME = "MyFile.txt"; public static void Main(String[] args)
{
if (!File.Exists(FILE_NAME)) {
Console.WriteLine("{0} does not exist.", FILE_NAME); return;
}
using (StreamReader sr = File.OpenText(FILE_NAME)) { String input; while ((input=sr.ReadLine())!=null) { Console.WriteLine(input); }
Console.WriteLine ("The end of the stream has been reached."); sr.Close();
} } }
堅牢性の高いプログラム
此のコードでは、File.OpenText を呼び出す事に依り、MyFile.txt を対象とする StreamReader が作成 されて居る。StreamReader.ReadLine は、各行を 1 つの文字列と仕て返す。読み取る文字が無く成る と、其れを知らせるメッセージが表示され、ストリームが閉じる。
メモ:Visual Basic のユーザーは、ファイル I/O 用の My.Computer.FileSystem オブジェクトに用意さ れて居るメソッドとプロパティを使用する事も出来る。詳細に付いては、「My.Computer.FileSystem オ
ブジェクト」を参照され度い。 ■ StreamWriter クラス 文字を特定のエンコーディングでストリームに書き込む為のTextWriter を実装して居る。 名 前 空 間:System.IO アセンブリ:mscorlib (mscorlib.dll 内) ■ StreamWriter オブジェクト 解説 StreamWriter は、文字を特定のエンコーディングで出力する為に使用する。一方、Stream の派生クラ スは、バイトの入出力に使用する。 他に指定が無い場合、StreamWriter は UTF8Encoding のインスタンスを使用する様に既定で設定され る。此のUTF8Encoding のインスタンスは、Encoding.GetPreamble メソッドが UTF-8 で書き込まれ たUnicode バイト順マークを返す様に構築される。エンコーディングのプリアンブルは、既存のストリ ームに追加する場合を除き、ストリームに追加される。詰まり、StreamWriter で作成された総てのテ キストファイルの先頭に、3 バイトのバイト順マークが含まれる。UTF-8 は、総ての Unicode 文字を正 しく処理し、オペレーティングシステムの各ローカライズバージョンで一貫した結果を提供する。 既 定 で は 、StreamWriter はスレッドセーフでは 無い。スレッドセーフラッパー に付いては、 TextWriter.Synchronized のトピックを参照され度い。 ■ StreamWriter オブジェクトのコンストラクタ StreamWriter クラスの新しいインスタンスを初期化する。 オーバーロードの一覧 名前 説明
StreamWriter (Stream) UTF-8 エンコーディングと既定のバッファサイズを使用し て、指定したストリーム用のStreamWriter クラスの新しい インスタンスを初期化する。
StreamWriter (String) 既定のエンコーディングとバッファサイズを使用して、指定 したパス上の指定したファイル用のStreamWriter クラスの 新しいインスタンスを初期化する。
StreamWriter (Stream, Encoding) 指定したエンコーディングと既定のバッファサイズを使用 して、指定したストリーム用のStreamWriter クラスの新し いインスタンスを初期化する。
StreamWriter (String, Boolean) 既定のエンコーディングとバッファサイズを使用して、指定 したパス上の指定したファイル用のStreamWriter クラスの 新しいインスタンスを初期化する。ファイルが存在する場合 は、ファイルを上書きするか、又は、ファイルの末尾に追加 出来る。ファイルが存在しない場合は、此のコンストラクタ が新しいファイルを作成する。 StreamWriter
(Stream, Encoding, Int32) 指定したエンコーディングとバッファサイズを使用して、指定したストリーム用のStreamWriter クラスの新しいインス タンスを初期化する。
StreamWriter
(String, Boolean, Encoding)
指定したエンコーディングと既定のバッファサイズを使用 し て 、 指 定 し た パ ス 上 の 指 定 し た フ ァ イ ル 用 の StreamWriter クラスの新しいインスタンスを初期化する。 ファイルが存在する場合は、ファイルを上書きするか、又は ファイルの末尾に追加出来る。ファイルが存在しない場合 は、此のコンストラクタが新しいファイルを作成する。 StreamWriter
(String, Boolean, Encoding, Int32) 指定したエンコーディングとバッファサイズを使用して、指定したパス上の指定したファイル用のStreamWriter クラス の新しいインスタンスを初期化する。ファイルが存在する場 合は、ファイルを上書きするか、又はファイルの末尾に追加 出来る。ファイルが存在しない場合は、此のコンストラクタ が新しいファイルを作成する。 ■ StreamWriter オブジェクトのメンバ プロパティ 名前 説明
AutoFlush StreamWriter.Write が呼び出されるたびに、StreamWriter に依り基に成るスト リームに対するバッファをフラッシュするか何うかを示す値を取得又は設定す る。 BaseStream バッキングストアと連結する、基に成るストリームを取得する。 Encoding オーバーライドされる。出力の書き込みに使用するEncoding を取得する。 FormatProvider 書式を制御するオブジェクトを取得する。 NewLine 現在のTextWriter で使用される行終端文字列を取得又は設定する。 メソッド 名前 説明 Close オーバーライドされる。現在のStreamWriter オブジェクトと基に成るス トリームを閉じる。 CreateObjRef リモートオブジェクトとの通信に使用するプロキシの生成に必要な情報 を総て格納して居るオブジェクトを作成する。 Dispose Equals 2 つの Object インスタンスが等しいか何うかを判断する。 Flush オーバーライドされる。現在のライタで使用した総てのバッファをクリア し、バッファ内の総てのデータを基に成るストリームに書き込む。 GetHashCode 特定の型のハッシュ関数として機能する。GetHashCode は、ハッシュア ルゴリズムや、ハッシュテーブルの様なデータ構造での使用に適して居 る。 GetLifetimeService 対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サー ビスオブジェクトを取得する。 GetType 現在のインスタンスのType を取得する。 InitializeLifetimeService 対象のインスタンスの有効期間ポリシーを制御する、有効期間サービスオ ブジェクトを取得する。 ReferenceEquals 指定した複数のObject インスタンスが同一か何うかを判断する。 Synchronized 指定したTextWriter をラップするスレッドセーフラッパーを作成する。 ToString 現在のObject を表す String を返す。
Write ストリームに書き込む。
終端記号を書き込む。 ■ ファイルにテキストを書き込む テキストファイルにテキストを書き込む方法を次のコード例に示す。 最初の例では、テキストを既存のファイルに追加する方法を示す。2 番目の例では、新しいテキストフ ァイルを作成して、此れに文字列を書き込む方法を示す。WriteAllText のメソッドも同様の機能を提供 する。
メモ:Visual Basic のユーザーは、ファイル I/O 用の My.Computer.FileSystem オブジェクトに用意さ れて居るメソッドとプロパティを使用する事も出来る。詳細に付いては、「My.Computer.FileSystem オ ブジェクト」を参照され度い。 使用例 Visual Basic Imports System Imports System.IO Class Test
Public Shared Sub Main()
' Create an instance of StreamWriter to write text to a file. Using sw As StreamWriter = New StreamWriter("TestFile.txt") ' Add some text to the file.
sw.Write("This is the ")
sw.WriteLine("header for the file.") sw.WriteLine("---")
' Arbitrary objects can also be written to the file. sw.Write("The date is: ")
sw.WriteLine(DateTime.Now) sw.Close() End Using End Sub End Class Option Explicit On Option Strict On Imports System Imports System.IO Public Class TextToFile
Private Const FILE_NAME As String = "MyFile.txt" Public Shared Sub Main()
If File.Exists(FILE_NAME) Then
Console.WriteLine("{0} already exists.", FILE_NAME) Return
End If
Using sw As StreamWriter = File.CreateText(FILE_NAME) sw.WriteLine("This is my file.")
sw.WriteLine("I can write ints {0} or floats {1}, and so on.", 1, 4.2) sw.Close()
End Using End Sub End Class
C# using System;
using System.IO; class Test {
public static void Main() {
// Create an instance of StreamWriter to write text to a file. // The using statement also closes the StreamWriter.
using (StreamWriter sw = new StreamWriter("TestFile.txt")) {
// Add some text to the file. sw.Write("This is the ");
sw.WriteLine("header for the file."); sw.WriteLine("---");
// Arbitrary objects can also be written to the file. sw.Write("The date is: ");
sw.WriteLine(DateTime.Now); } } } using System; using System.IO; public class TextToFile {
private const string FILE_NAME = "MyFile.txt"; public static void Main(String[] args)
{
if (File.Exists(FILE_NAME)) {
Console.WriteLine("{0} already exists.", FILE_NAME); return;
}
using (StreamWriter sw = File.CreateText(FILE_NAME)) {
sw.WriteLine ("This is my file.");
sw.WriteLine ("I can write ints {0} or floats {1}, and so on.", 1, 4.2); sw.Close(); } } } ■ FileStream クラス 同期、及び、非同期の読み取り操作と書き込み操作をサポートするファイル用のStream を公開する。 名 前 空 間:System.IO アセンブリ:mscorlib (mscorlib.dll 内) ■ FileStream オブジェクト 解説
FileStream クラスは、ファイルシステム上のファイルの読み取り、書き込み、オープン、クローズ、 及び、ファイル関連の其の他のオペレーティングシステムハンドル(パイプ、標準入力、標準出力等) の操作に使用する。読み取り操作と書き込み操作は、同期、又は、非同期の孰れかに指定出来る。 FileStream バッファの入出力を使用するとパフォーマンスが向上する。 FileStream オブジェクトは、Seek メソッドに依るファイルへのランダムアクセスをサポートする。 Seek メソッドを使用すると、ファイル内の任意の位置に読み取り/書き込み位置を移動出来る。此れは バイトオフセット参照ポイントのパラメータで行う。バイトオフセットはシーク参照ポイントに対して 相対的で有る。シーク参照ポイントをSeekOrigin クラスの 3 つのプロパティの指定に従って、基に成 るファイルの先頭、現在位置、又は、末尾の孰れかに指定出来る。 メモ:ディスクファイルは、常にランダムアクセスをサポートする。構築時に、基に成るファイルの種 類に応じて、CanSeek プロパティが true、又は、false に設定される。具体的には、基に成るファイル の種類がwinbase.h で定義される FILE_TYPE_DISK の場合、CanSeek プロパティは true に設定され る。其れ以外の場合、CanSeek プロパティは false に設定される。
同期メソッドのRead と Write、及び、非同期メソッドの BeginRead、BeginWrite、EndRead、EndWrite は、同期モード、又は、非同期モードの孰れでも動作出来るが、モードは此等のメソッドのパフォーマ ンスに影響する。FileStream は、既定ではファイルを同期的に開くが、ファイルを非同期的に開く FileStream コンストラクタと FileStream コンストラクタも用意されて居る。 ファイルの一部がロックされた状態でプロセスが終了した場合、又は、ロックが保留されて居るファイ ルを閉じた場合の動作は未定義で有る。 ディスク容量が限られて居る環境では、FileStream を終了する前に Dispose メソッドが呼び出されて 居ない場合、I/O 操作を実行すると例外が発生する可能性が有る。 ディレクトリと其の他のファイル操作に付いては、File、Directory、Path の各クラスのトピックを参 照され度い。File クラスは、ファイルパス、標準入力、標準出力、及び、標準エラーデバイスに基づい た FileStream オブジェクトの作成を主とする静的メソッドを持つユーティリティクラスで有る。 MemoryStream クラスは、FileStream と同様に、バイト配列と関数からストリームを作成する。 ■ FileStream オブジェクトのコンストラクタ FileStream クラスの新しいインスタンスを初期化する。 名前 説明
FileStream (IntPtr, FileAccess) FileStream クラスの新しいインスタンスを、指定した読み取り/ 書き込みアクセス許可を使用して、指定したファイルハンドル用 に初期化する。
FileStream (SafeFileHandle,
FileAccess) FileStream クラスの新しいインスタンスを、指定した読み取り/書き込みアクセス許可を使用して、指定したファイルハンドル用 に初期化する。
FileStream (String, FileMode) FileStream クラスの新しいインスタンスを、指定したパスと作 成モードを使用して作成する。
FileStream (IntPtr, FileAccess,
Boolean) FileStream クラスの新しいインスタンスを、指定した読み取り/書き込みアクセス許可と FileStream インスタンスの所有権を使 用して、指定したファイルハンドル用に初期化する。
FileStream (SafeFileHandle,
書き込みアクセス許可、及び、バッファサイズを使用して、指定 したファイルハンドル用に初期化する。
FileStream (String, FileMode,
FileAccess) FileStream クラスの新しいインスタンスを、指定したパス、作成モード、及び、読み取り/書き込みアクセス許可を使用して初期 化する。
FileStream (IntPtr, FileAccess,
Boolean, Int32) FileStream クラスの新しいインスタンスを、指定した読み取り/書き込みアクセス許可、FileStream インスタンスの所有権、及 び、バッファサイズを使用して、指定したファイルハンドル用に 初期化する。
FileStream (SafeFileHandle,
FileAccess, Int32, Boolean) FileStream クラスの新しいインスタンスを、指定した読み取り/書き込みアクセス許可、バッファサイズ、及び、同期状態、又は、 非同期状態を使用して、指定したファイルハンドル用に初期化す る。
FileStream (String, FileMode,
FileAccess, FileShare) FileStream クラスの新しいインスタンスを、指定したパス、作成モード、読み取り/書き込みアクセス許可、及び、共有アクセス 許可を使用して初期化する。
FileStream (IntPtr, FileAccess,
Boolean, Int32, Boolean) FileStream クラスの新しいインスタンスを、指定した読み取り/書き込みアクセス許可、FileStream インスタンスの所有権、バ ッファサイズ、及び、同期状態、又は、非同期状態を使用して、 指定したファイルハンドル用に初期化する。
FileStream (String, FileMode,
FileAccess, FileShare, Int32) FileStream クラスの新しいインスタンスを、指定したパス、作成モード、読み取り/書き込みアクセス許可、共有アクセス許可、 及び、バッファサイズを使用して初期化する。
FileStream (String, FileMode, FileAccess, FileShare, Int32, Boolean)
FileStream クラスの新しいインスタンスを、指定したパス、作 成モード、読み取り/書き込みアクセス許可、共有アクセス許可、 バッファサイズ、及び、同期状態又は非同期状態を使用して初期 化する。
FileStream (String, FileMode, FileAccess, FileShare, Int32, FileOptions) FileStream クラスの新しいインスタンスを、指定したパス、作 成モード、読み取り/書き込みアクセス許可、共有アクセス許可、 同一のファイルに対して他の FileStream が保有出来るアクセ ス、バッファサイズ、及び、追加のファイルオプションを使用し て初期化する。
FileStream (String, FileMode, FileSystemRights, FileShare, Int32, FileOptions)
FileStream クラスの新しいインスタンスを、指定したパス、作 成モード、アクセス権、共有アクセス許可、バッファサイズ、及 び、追加のファイルオプションを使用して初期化する。
FileStream (String, FileMode, FileSystemRights, FileShare, Int32, FileOptions, FileSecurity)
FileStream クラスの新しいインスタンスを、指定したパス、作 成モード、アクセス権、共有アクセス許可、バッファサイズ、追 加のファイルオプション、アクセス制御、及び、監査セキュリテ ィを使用して初期化する。 ■ FileStream オブジェクトのメンバ プロパティ 名前 説明 CanRead 現在のストリームが読み取りをサポートして居るか何うかを示す値を取得する。 CanSeek 現在のストリームがシークをサポートして居るか何うかを示す値を取得する。 CanTimeout 現在のストリームがタイムアウト出来るか何うかを決定する値を取得する。 CanWrite 現在のストリームが書き込みをサポートして居るか何うかを示す値を取得する。 Handle 現在のFileStream オブジェクトに依りカプセル化されるファイルのオペレーティ
ングシステムファイルハンドルを取得する。 IsAsync FileStream が非同期的に開かれたか、同期的に開かれたかを示す値を取得する。 Length ストリーム長(バイト単位)を取得する。 Name コンストラクタに渡されたFileStream の名前を取得する。 Position ストリームの現在位置を取得、又は、設定する。 ReadTimeout ストリームがタイムアウト前に読み取りを試行する期間を決定する値を取得、又 は、設定する。 SafeFileHandle 現在の FileStream オブジェクトに依りカプセル化されるファイルのオペレーティ ングシステムファイルハンドルを表すSafeFileHandle オブジェクトを取得する。 WriteTimeout ストリームがタイムアウト前に書き込みを試行する期間を決定する値を取得、又 は、設定する。 メソッド 名前 説明 BeginRead オーバーライドされる。非同期の読み取りを開始する。 BeginWrite オーバーライドされる。非同期の書き込みを開始する。 Close 現在のストリームを閉じ、現在のストリームに関連付けられて居る総ての リソース(ソケット、ファイルハンドル等)を解放する。 CreateObjRef リモートオブジェクトとの通信に使用するプロキシの生成に必要な情報 を総て格納して居るオブジェクトを作成する。 Dispose EndRead オーバーライドされる。保留中の非同期読み取りが完了する迄待機する。 EndWrite オーバーライドされる。非同期の書き込みを終了し、I/O 操作が完了する 迄ブロックする。 Equals 2 つの Object インスタンスが等しいか何うかを判断する。 Flush オーバーライドされる。ストリームに対応する総てのバッファをクリア し、バッファ内のデータを基に成るデバイスに書き込む。 GetAccessControl 現在の FileStream オブジェクトが示すファイルのアクセス制御リスト (ACL:Access Control List)エントリをカプセル化する FileSecurity オブジェクトを取得する。 GetHashCode 特定の型のハッシュ関数として機能する。GetHashCode は、ハッシュア ルゴリズムや、ハッシュテーブルの様なデータ構造での使用に適して居 る。 GetLifetimeService 対象のインスタンスの有効期間ポリシーを制御する、現在の有効期間サー ビスオブジェクトを取得する。 GetType 現在のインスタンスのType を取得する。 InitializeLifetimeService 対象のインスタンスの有効期間ポリシーを制御する、有効期間サービスオ ブジェクトを取得する。 Lock 読み取りアクセスを許可して居る間に他のプロセスに依りFileStream が 変更されるのを防ぐ。 Read オーバーライドされる。ストリームからバイトのブロックを読み取り、其 のデータを特定のバッファに書き込む。 ReadByte オーバーライドされる。ファイルからバイトを読み取り、読み取り位置を 1 バイト進める。 ReferenceEquals 指定した複数のObject インスタンスが同一か何うかを判断する。 Seek オーバーライドされる。ストリームの現在位置を特定の値に設定する。
SetAccessControl FileSecurity オブジェクトが示すアクセス制御リスト(ACL)エントリを、 現在のFileStream オブジェクトが示すファイルに適用する。
Synchronized 指定した Stream オブジェクトをラプするスレッドセーフな(同期され た)ラッパーを作成する。
ToString 現在のObject を表す String を返す。
Unlock 他のプロセスに依り以前にロックされたファイルの全部、又は、一部への アクセスを許可する。 Write オーバーライドされる。バッファのデータを使用して、ストリームにバイ トのブロックを書き込む。 WriteByte オーバーライドされる。ファイルストリームの現在位置にバイトを書き込 む。 ■ 新しく作成されたデータファイルに対して読み書きする BinaryWriter クラス、及び、BinaryReader クラスは、文字列ではない形式でデータを書き込んだり読 み取ったりする為に使用する。新しい空のファイルストリーム(Test.data)に対するデータの書き込み と読み取りを実行するコードの例を次に示す。現在のディレクトリにデータファイルを作成した後、其 のファイルに関連付けたBinaryWriter と BinaryReader を作成し、BinaryWriter を使用して整数 0 ~ 10 を Test.data に書き込む。ファイルポインタはファイルの末尾に残って居る。BinaryReader はファ イルポインタを起点に戻してから、指定された内容を読み出す。 使用例 Visual Basic Option Explicit On Option Strict On Imports System Imports System.IO Class MyStream
Private Const FILE_NAME As String = "Test.data" Public Shared Sub Main()
' Create the new, empty data file. If File.Exists(FILE_NAME) Then
Console.WriteLine("{0} already exists!", FILE_NAME) Return
End If
Dim fs As New FileStream(FILE_NAME, FileMode.CreateNew) ' Create the writer for data.
Dim w As New BinaryWriter(fs) ' Write data to Test.data.
Dim i As Integer For i = 0 To 10 w.Write(CInt(i)) Next i w.Close() fs.Close()
' Create the reader for data.
fs = New FileStream(FILE_NAME, FileMode.Open, FileAccess.Read) Dim r As New BinaryReader(fs)
' Read data from Test.data. For i = 0 To 10
Console.WriteLine(r.ReadInt32()) Next i
r.Close() fs.Close()
End Sub End Class C# using System; using System.IO; class MyStream {
private const string FILE_NAME = "Test.data"; public static void Main(String[] args)
{
// Create the new, empty data file. if (File.Exists(FILE_NAME)) {
Console.WriteLine("{0} already exists!", FILE_NAME); return;
}
FileStream fs = new FileStream(FILE_NAME, FileMode.CreateNew); // Create the writer for data.
BinaryWriter w = new BinaryWriter(fs); // Write data to Test.data.
for (int i = 0; i < 11; i++) {
w.Write( (int) i); }
w.Close(); fs.Close();
// Create the reader for data.
fs = new FileStream(FILE_NAME, FileMode.Open, FileAccess.Read); BinaryReader r = new BinaryReader(fs);
// Read data from Test.data. for (int i = 0; i < 11; i++) { Console.WriteLine(r.ReadInt32()); } r.Close(); fs.Close(); } } 堅牢性の高いプログラム Test.data が 既 に 現 在 の デ ィ レ ク ト リ に 存 在 す る 場 合 は 、 IOException が ス ロ ー さ れ る 。 FileMode.Create を使用すると、IOException がスローされずに新しいファイルが必ず作成される。