基本のファイル I/O
抽象基本クラス Stream は、バイトの読み取りと書き込みをサポートします。Stream では非同期操作もサポートされています。Stream の既定の実装では、同期読み取りや同期書き込みが対応する非同期のメソッドによって定義され、その逆の定義も行われます。
ストリームを表すすべてのクラスは、Stream クラスから継承されます。Stream クラスとその派生クラスは、データ ソースやリポジトリの汎用ビューを提供し、プログラマがオペレーティング システムや基になるデバイスに固有の詳細事項を考慮する必要をなくします。
ストリームは、次の基本操作をサポートします。
ストリームからの読み取りが可能です。この読み取りとは、ストリームからバイト配列などのデータ構造体にデータを転送することです。
ストリームへの書き込みが可能です。この書き込みとは、データ ソースからストリームにデータを転送することです。
ストリームは、シークをサポートします。シークとは、ストリーム内の現在位置を照会したり、変更したりすることです。
基になるデータ ソースまたはリポジトリによっては、ストリームがサポートできる機能が上記の一部に限られる場合があります。たとえば、NetworkStream では、シークはサポートされません。Stream およびその派生クラスの CanRead、CanWrite、CanSeek の各プロパティによって、それぞれのストリームがサポートする操作が決まります。
共通 I/O タスクの一覧については、「共通 I/O タスク」を参照してください。
メモ : |
---|
Visual Basic のユーザーは、ファイル I/O 用の My.Computer.FileSystem オブジェクトに用意されているメソッドとプロパティを使用することもできます。詳細については、「My.Computer.FileSystem オブジェクト」を参照してください。 |
ファイル I/O に使用されるクラス
Directory は、ディレクトリやサブディレクトリを作成、移動、反復処理するための静的メソッドを提供します。DirectoryInfo クラスは、インスタンス メソッドを提供します。
DirectoryInfo は、ディレクトリやサブディレクトリを作成、移動、反復処理するためのインスタンス メソッドを提供します。Directory クラスは、静的メソッドを提供します。
DriveInfo は、ドライブに関する情報にアクセスするためのインスタンス メソッドを提供します。
File は、ファイルを作成、コピー、削除、移動したり、開いたりするための静的メソッドを提供し、FileStream の作成を支援します。FileInfo クラスは、インスタンス メソッドを提供します。
FileInfo は、ファイルを作成、コピー、削除、移動したり、開いたりするためのインスタンス メソッドを提供し、FileStream の作成を支援します。File クラスは、静的メソッドを提供します。
FileStream は、Seek メソッドによってファイルへのランダム アクセスをサポートします。FileStream は、既定では同期的にファイルを開きますが、非同期操作もサポートします。File には静的メソッドが含まれており、FileInfo にはインスタンス メソッドが含まれています。
FileSystemInfo は、FileInfo と DirectoryInfo の抽象基本クラスです。
Path は、複数のプラットフォームにまたがってディレクトリ文字列を処理するためのメソッドおよびプロパティを提供します。
DeflateStream は、Deflate アルゴリズムを使用してストリームを圧縮および圧縮解除するためのメソッドとプロパティを提供します。
GZipStream は、ストリームを圧縮および圧縮解除するためのメソッドとプロパティを提供します。既定では、このクラスは DeflateStream クラスと同じアルゴリズムを使用しますが、他の圧縮形式を使用するように拡張できます。
SerialPort は、シリアル ポートのファイル リソースを制御するためのメソッドとプロパティを提供します。
File、FileInfo、DriveInfo、Path、Directory、および DirectoryInfo は、シール クラス (Microsoft Visual Basic では NotInheritable クラス) です。これらのクラスの新しいインスタンスを作成することはできますが、派生クラスは作成できません。
ストリームの読み取りと書き込みに使用されるクラス
BinaryReader と BinaryWriter は、エンコードされた文字列やプリミティブ データ型をそれぞれ Stream から読み取ったり、Stream に書き込んだりします。
StreamReader は、Encoding を使用して文字とバイト間の変換を行い、Stream から文字を読み取ります。StreamReader には、Encoding 固有のプリアンブル (バイト順マークなど) があるかどうかに応じて、指定した Stream に適した Encoding を確認するコンストラクタがあります。
StreamWriter は、文字をバイトに変換する Encoding を使用して文字を Stream に書き込みます。
StringReader は String から文字列を読み取ります。StringReader を使用すると複数の String を同じ API で処理できるため、出力はエンコーディングした Stream または String のいずれかになります。
StringWriter は、文字を String に書き込みます。StringWriter を使用すると複数の String を同じ API で処理できるため、出力はエンコーディングした Stream または String のいずれかになります。
TextReader は、StreamReader と StringReader の抽象基本クラスです。Stream 抽象クラスの実装がバイトの入出力を処理するためにデザインされているのに対し、TextReader の実装は Unicode 文字の出力用にデザインされています。
TextWriter は、StreamWriter と StringWriter の抽象基本クラスです。Stream 抽象クラスの実装がバイトの入出力を処理するためにデザインされているのに対し、TextWriter の実装は Unicode 文字の入力用にデザインされています。
一般的な I/O ストリーム クラス
BufferedStream は、NetworkStream などの他の Stream にバッファリング機能を追加する Stream です (ただし、FileStream には既にバッファリング機能が組み込まれています。また、MemoryStream ではバッファリングは不要です)。読み取りや書き込みのパフォーマンスを向上させるには、いくつかの型のストリームに対して BufferedStream を用意します。バッファは、データをキャッシュするために使用するメモリ内のバイト ブロックです。バッファを使用することで、オペレーティング システムの呼び出し回数を減らすことができます。
CryptoStream は、データ ストリームを暗号化方式にリンクします。CryptoStream は Stream の派生クラスですが、System.IO 名前空間の一部には含まれず、System.Security.Cryptography 名前空間に属します。
MemoryStream はバッファリングされないストリームで、その中にカプセル化されたデータにはメモリ内で直接アクセスできます。このストリームには関連するバッキング ストアがないため、一時バッファとして利用されます。
NetworkStream は、ネットワーク接続上の Stream を表します。NetworkStream は Stream から派生しますが、System.IO 名前空間の一部には含まれず、System.Net.Sockets 名前空間に属します。
I/O とセキュリティ
System.IO 名前空間のクラスを使用する場合、アクセス制御リスト (ACL: Access Control Lists) などのオペレーティング システムのセキュリティ要件が満たされていないと、各種のアクセスを行うことはできません。この要件のほかにも、FileIOPermission で指定されている要件を満たす必要があります。
メモ : |
---|
ACL はプログラムで管理できます。詳細については、「方法 : アクセス制御リスト エントリを追加または削除する」および「アクセス制御リスト (ACL: Access Control List) 技術の概要」を参照してください。 |
ヒント
インターネットおよびイントラネットの既定のセキュリティ ポリシーでは、ファイルへのアクセスは許可されていません。このため、インターネットからダウンロードされるコードを作成する場合、標準の分離されていないストレージ I/O クラスは使用しないでください。代わりに、分離ストレージを使用してください。
ヒント
ファイル ストリームやネットワーク ストリームを開いたとき、セキュリティ チェックが実行されるのは、ストリームが構築されている場合だけです。したがって、それらのストリームを信頼度の低いコードやアプリケーション ドメインに渡すときは注意が必要です。
参照
処理手順
方法 : ディレクトリ一覧を作成する
方法 : 新しく作成されたデータ ファイルに対して読み書きする
方法 : ログ ファイルを開いて情報を追加する
方法 : ファイルからテキストを読み取る
方法 : ファイルにテキストを書き込む
方法 : 文字列から文字を読み取る
方法 : 文字列に文字を書き込む