ファイル I/O とストリーム I/O (入出力) とは、ストレージ メディアとの間でのデータの転送を指します。 .NET では、 System.IO
名前空間には、データ ストリームとファイルの読み取りと書き込みを同期と非同期の両方で有効にする型が含まれています。 これらの名前空間には、ファイルの圧縮と展開を実行する型と、パイプとシリアル ポートを介した通信を可能にする型も含まれています。
ファイルは、永続的ストレージを持つバイトの順序付き名前付きコレクションです。 ファイルを操作するときは、ディレクトリ パス、ディスク ストレージ、およびファイル名とディレクトリ名を操作します。 これに対し、ストリームは、バッキング ストアの読み取りと書き込みに使用できる一連のバイトです。これは、複数のストレージ メディア (ディスクやメモリなど) のいずれかになります。 ディスク以外のバッキング ストアが複数あるのと同様に、ネットワーク、メモリ、パイプ ストリームなど、ファイル ストリーム以外のいくつかの種類のストリームがあります。
ファイルとディレクトリ
System.IO名前空間の型を使用して、ファイルとディレクトリを操作できます。 たとえば、ファイルとディレクトリのプロパティを取得および設定したり、検索条件に基づいてファイルとディレクトリのコレクションを取得したりできます。
パスの名前付け規則と、.NET Core 1.1 以降および .NET Framework 4.6.2 以降でサポートされている DOS デバイス構文など、Windows システムのファイル パスを表す方法については、 Windows システムのファイル パス形式を参照してください。
一般的に使用されるファイル クラスとディレクトリ クラスを次に示します。
File - ファイルの作成、コピー、削除、移動、および開くための静的メソッドを提供し、 FileStream オブジェクトの作成に役立ちます。
FileInfo - ファイルの作成、コピー、削除、移動、および開くためのインスタンス メソッドを提供し、 FileStream オブジェクトの作成に役立ちます。
Directory - ディレクトリとサブディレクトリを作成、移動、列挙するための静的メソッドを提供します。
DirectoryInfo - ディレクトリとサブディレクトリを作成、移動、列挙するためのインスタンス メソッドを提供します。
Path - クロスプラットフォーム方式でディレクトリ文字列を処理するためのメソッドとプロパティを提供します。
ファイルシステム メソッドを呼び出すときは、常に堅牢な例外処理を提供する必要があります。 詳細については、「 I/O エラーの処理」を参照してください。
Visual Basic ユーザーは、これらのクラスの使用に加えて、ファイル I/O に対して Microsoft.VisualBasic.FileIO.FileSystem クラスによって提供されるメソッドとプロパティを使用できます。
「 方法: ディレクトリをコピーする」、「 方法: ディレクトリ一覧を作成する」、および 「方法: ディレクトリとファイルを列挙する」を参照してください。
ストリーム
抽象基底クラス Stream は、バイトの読み取りと書き込みをサポートします。 ストリームを表すクラスはすべて、 Stream クラスから継承されます。 Stream クラスとその派生クラスは、データ ソースとリポジトリの共通ビューを提供し、オペレーティング システムと基になるデバイスの特定の詳細からプログラマを分離します。
ストリームには、次の 3 つの基本的な操作が含まれます。
読み取り - ストリームからデータ構造 (バイト配列など) にデータを転送します。
書き込み - データ ソースからストリームにデータを転送します。
シーク - ストリーム内の現在位置を照会および変更します。
基になるデータ ソースまたはリポジトリによっては、ストリームでこれらの機能の一部のみがサポートされる場合があります。 たとえば、PipeStream クラスはシーク機能をサポートしていません。 ストリームの CanRead、 CanWrite、および CanSeek プロパティは、ストリームがサポートする操作を指定します。
一般的に使用されるストリーム クラスを次に示します。
FileStream – ファイルの読み取りと書き込み。
IsolatedStorageFileStream – 分離ストレージ内のファイルの読み取りと書き込み。
MemoryStream – バッキング ストアとしてのメモリへの読み取りと書き込み。
BufferedStream – 読み取り操作と書き込み操作のパフォーマンスを向上させます。
NetworkStream – ネットワーク ソケットを介した読み取りと書き込み。
PipeStream – 匿名パイプと名前付きパイプを介して読み取りと書き込みを実行します。
CryptoStream – データ ストリームを暗号化変換にリンクします。
ストリームを非同期的に操作する例については、「 非同期ファイル I/O」を参照してください。
閲覧者とライター
System.IO名前空間には、ストリームからエンコードされた文字を読み取り、ストリームに書き込むための型も用意されています。 通常、ストリームはバイト入力と出力用に設計されています。 リーダー型とライター型は、ストリームが操作を完了できるように、エンコードされた文字のバイト間の変換を処理します。 各リーダー クラスとライター クラスはストリームに関連付けられています。ストリームは、クラスの BaseStream
プロパティを使用して取得できます。
よく使用されるリーダー クラスとライター クラスを次に示します。
BinaryReader と BinaryWriter – プリミティブ データ型をバイナリ値として読み書きします。
StreamReaderStreamWriter – エンコード値を用いて文字をバイトに変換したり、バイトから文字を変換したりして読み書きします。
StringReaderStringWriter – 文字列との間で文字を読み書きします。
TextReader および TextWriter – バイナリ データではなく、文字と文字列の読み取りと書き込みを行う他のリーダーおよびライターの抽象基底クラスとして機能します。
「方法: ファイルからテキストを読み取る」、「方法: テキストをファイルに書き込む」、方法: 文字列から文字を読み取る方法、および文字列に文字を書き込む方法を参照してください。
非同期 I/O 操作
大量のデータの読み取りまたは書き込みは、リソースを大量に消費する可能性があります。 アプリケーションがユーザーに対する応答性を維持する必要がある場合は、これらのタスクを非同期的に実行する必要があります。 同期 I/O 操作では、リソースを集中的に使用する操作が完了するまで UI スレッドがブロックされます。 Windows 8.x ストア アプリを開発するときに非同期 I/O 操作を使用して、アプリが動作しなくなったという印象を作り出さないようにします。
非同期メンバーの名前には、Async
、CopyToAsync、FlushAsync、ReadAsync メソッドなどのWriteAsyncが含まれます。 これらのメソッドは、 async
キーワードと await
キーワードと共に使用します。
詳細については、「 非同期ファイル I/O」を参照してください。
圧縮
圧縮とは、ストレージ用のファイルのサイズを小さくするプロセスを指します。 圧縮解除は、圧縮ファイルの内容を抽出して、使用可能な形式になるようにするプロセスです。 System.IO.Compression名前空間には、ファイルとストリームを圧縮および展開するための型が含まれています。
次のクラスは、ファイルとストリームを圧縮および展開するときによく使用されます。
ZipArchive – zip アーカイブ内のエントリを作成および取得します。
ZipArchiveEntry – 圧縮ファイルを表します。
ZipFile – 圧縮パッケージを作成、抽出、および開く。
ZipFileExtensions – 圧縮パッケージ内のエントリを作成および抽出します。
DeflateStream – Deflate アルゴリズムを使用してストリームを圧縮および展開する場合。
GZipStream – gzip データ形式でストリームを圧縮および展開する場合。
「 方法: ファイルを圧縮および抽出する」を参照してください。
分離ストレージ
分離ストレージは、コードを保存されたデータに関連付けするための標準化された方法を定義することによって、分離と安全性を提供するデータ ストレージ メカニズムです。 ストレージには、ユーザー、アセンブリ、および (必要に応じて) ドメインによって分離された仮想ファイル システムが用意されています。 分離ストレージは、アプリケーションにユーザー ファイルへのアクセス許可がない場合に特に便利です。 コンピューターのセキュリティ ポリシーによって制御される方法で、アプリケーションの設定またはファイルを保存できます。
分離ストレージは、Windows 8.x ストア アプリでは使用できません。代わりに、 Windows.Storage 名前空間のアプリケーション データ クラスを使用してください。 詳細については、「 アプリケーション データ」を参照してください。
分離ストレージを実装する場合、次のクラスが頻繁に使用されます。
IsolatedStorage – 分離ストレージ実装の基本クラスを提供します。
IsolatedStorageFile – ファイルとディレクトリを含む分離ストレージ領域を提供します。
IsolatedStorageFileStream - 分離ストレージ内のファイルを公開します。
分離ストレージを参照してください。
Windows ストア アプリでの I/O 操作
.NET for Windows 8.x ストア アプリには、ストリームとの間で読み取りと書き込みを行う多くの種類が含まれています。ただし、このセットにはすべての .NET I/O 型が含まれているわけではありません。
Windows 8.x ストア アプリで I/O 操作を使用する場合に注意すべき重要な違いを次に示します。
File、FileInfo、Directory、DirectoryInfoなど、ファイル操作に特に関連する型は、Windows 8.x ストア アプリの .NET には含まれません。 代わりに、Windows.StorageやStorageFileなど、Windows ランタイムのStorageFolder名前空間の型を使用します。
分離ストレージは使用できません。代わりに、 アプリケーション データを使用してください。
やなどの非同期メソッドを使用して、UI スレッドをブロックしないようにします。
パスベースの圧縮の種類 ZipFile と ZipFileExtensions は使用できません。 代わりに、 Windows.Storage.Compression 名前空間の型を使用します。
必要に応じて、.NET Framework ストリームと Windows ランタイム ストリームの間で変換できます。 詳細については、「WindowsRuntimeStreamExtensionsを参照してください。
Windows 8.x ストア アプリでの I/O 操作の詳細については、「 クイック スタート: ファイルの読み取りと書き込み」を参照してください。
I/O とセキュリティ
System.IO名前空間のクラスを使用する場合は、アクセス制御リスト (ACL) などのオペレーティング システムのセキュリティ要件に従って、ファイルやディレクトリへのアクセスを制御する必要があります。 この要件は、FileIOPermissionの要件に加えて要求されます。 ACL はプログラムで管理できます。 詳細については、「 方法: アクセス制御リスト エントリを追加または削除する」を参照してください。
既定のセキュリティ ポリシーにより、インターネットまたはイントラネット アプリケーションがユーザーのコンピューター上のファイルにアクセスできなくなります。 そのため、インターネットまたはイントラネット経由でダウンロードされるコードを記述するときは、物理ファイルへのパスを必要とする I/O クラスを使用しないでください。 代わりに、.NET アプリケーション用 の分離ストレージ を使用してください。
セキュリティ チェックは、ストリームが構築されている場合にのみ実行されます。 そのため、ストリームを開き、信頼されていないコードまたはアプリケーション ドメインに渡さないでください。
関連トピック
一般的な I/O タスク
ファイル、ディレクトリ、ストリームに関連付けられている I/O タスクの一覧と、各タスクの関連するコンテンツと例へのリンクを提供します。非同期ファイル I/O
非同期 I/O のパフォーマンスの利点と基本的な操作について説明します。分離ストレージ
コードを保存されたデータに関連付けするための標準化された方法を定義することによって、分離と安全性を提供するデータ ストレージ メカニズムについて説明します。パイプ
.NET での匿名および名前付きパイプ操作について説明します。メモリ マップ ファイル
仮想メモリ内のディスク上のファイルの内容を含む、メモリ マップト ファイルについて説明します。 メモリ マップト ファイルを使用して、非常に大きなファイルを編集したり、プロセス間通信用の共有メモリを作成したりできます。
.NET