次の方法で共有


System.IO.FileStream クラス

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

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

Von Bedeutung

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

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

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

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

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

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

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

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

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

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

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

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