System.IO.FileStream クラス

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

クラスを FileStream 使用して、ファイル システム上のファイルの読み取り、書き込み、開き、閉じ、パイプ、標準入力、標準出力など、他のファイル関連のオペレーティング システム ハンドルを操作します。 、、CopyTo、およびFlushメソッドをRead使用して同期操作を実行したり、非同期操作をReadAsyncCopyToAsyncFlushAsyncWriteAsync実行するメソッドを使用したりできます。 Write 非同期メソッドを使用して、メイン スレッドをブロックすることなく、リソースを大量に消費するファイル操作を実行します。 このパフォーマンスに関する考慮事項は、時間のかかるストリーム操作によって UI スレッドがブロックされ、アプリが動作していないと見なされる可能性がある Windows 8.x Store アプリまたはデスクトップ アプリで特に重要です。 FileStream は、パフォーマンスを向上させるために入力と出力をバッファーします。

重要

この型は IDisposable インターフェイスを実装します。 型の使用が完了したら、直接的または間接的に型を破棄する必要があります。 直接的に型を破棄するには、try/catch ブロック内で Dispose メソッドを呼び出します。 間接的に型を破棄するには、using (C# の場合) または Using (Visual Basic 言語) などの言語構成要素を使用します。 詳細については、IDisposable インターフェイスに関するトピック内の「IDisposable を実装するオブジェクトの使用」セクションを参照してください。

このプロパティは IsAsync 、ファイル ハンドルが非同期的に開かれたかどうかを検出します。 この値は、クラスのFileStreamインスタンスを作成するときに、またはパラメーターを持つコンストラクターをisAsyncuseAsyncoptions使用して指定します。 プロパティが指定されている場合、ストリームは true重複する I/O を使用してファイル操作を非同期的に実行します。 ただし、プロパティで IsAsync 、、またはCopyToAsyncメソッドを呼び出すReadAsync必要trueはありません。 WriteAsync プロパティがfalse指定IsAsyncされていて、非同期の読み取りおよび書き込み操作を呼び出しても、UI スレッドはブロックされませんが、実際の I/O 操作は同期的に実行されます。

このメソッドは Seek 、ファイルへのランダム アクセスをサポートします。 Seek では、読み取り/書き込み位置をファイル内の任意の位置に移動できます。 これは、バイト オフセット参照ポイント パラメーターを使用して行われます。 バイト オフセットは、列挙型の 3 つのメンバー SeekOrigin によって表される、基になるファイルの先頭、現在の位置、または末尾であるシーク参照ポイントに対する相対位置です。

Note

ディスク ファイルは常にランダム アクセスをサポートします。 構築時に、 CanSeek プロパティ値は基になるファイルの種類に true 設定されるか false 、または基になるファイルの種類に応じて設定されます。 基になるファイルの種類が winbase.h で定義されているFILE_TYPE_DISK場合、プロパティ値 CanSeektrue. それ以外の場合、プロパティ値 CanSeekfalse.

プロセスがファイルの一部をロックして終了するか、未処理のロックを持つファイルを閉じると、動作は未定義になります。

ディレクトリ操作とその他のファイル操作については、,,およびPathクラスをFileDirectory参照してください。 この File クラスは、主にファイル パスに基づいてオブジェクトを作成 FileStream するための静的メソッドを持つユーティリティ クラスです。 クラスは MemoryStream バイト配列からストリームを作成し、クラスに FileStream 似ています。

一般的なファイル操作とディレクトリ操作の一覧については、「一般的な I/O タスク」を参照してください

ストリーム位置の変化の検出

オブジェクトの FileStream ハンドルが排他的に保持されていない場合、別のスレッドが同時にファイル ハンドルにアクセスし、ファイル ハンドルに関連付けられているオペレーティング システムのファイル ポインターの位置を変更できます。 この場合、オブジェクト内の FileStream キャッシュされた位置とバッファー内のキャッシュされたデータが侵害される可能性があります。 オブジェクトはFileStream、キャッシュされたバッファーにアクセスするメソッドに対してチェックを定期的に実行して、オペレーティング システムのハンドル位置が、オブジェクトでFileStream使用されるキャッシュされた位置と同じになるようにします。

メソッドの呼び出しReadでハンドル位置の予期しない変更が検出された場合、.NET はバッファーの内容をカードし、ファイルからストリームを再度読み取ります。 これは、ファイルのサイズや、ファイル ストリームの位置に影響する可能性があるその他のプロセスによっては、パフォーマンスに影響を与える可能性があります。

メソッドの呼び出しWriteでハンドル位置の予期しない変更が検出された場合、バッファーの内容は破棄カードされ、IOException例外がスローされます。

FileStreamハンドルを公開するためにプロパティにアクセスするかSafeFileHandle、オブジェクトにコンストラクターのプロパティが指定SafeFileHandleされている場合、オブジェクトはハンドルFileStreamを排他的に保持しません。