ファイルおよびストリーム入出力File and Stream I/O

ファイルおよびストリーム I/O (入出力) とは、ストレージ メディアとの間のデータの転送を指します。File and stream I/O (input/output) refers to the transfer of data either to or from a storage medium. .NET Framework では、System.IO 名前空間に、データ ストリームおよびファイルで同期的および非同期的に読み取りと書き込みを有効にする型が用意されています。In the .NET Framework, the System.IO namespaces contain types that enable reading and writing, both synchronously and asynchronously, on data streams and files. これらの名前空間には、ファイルを圧縮および圧縮解除する型、パイプとシリアル ポート経由の通信を有効にする型もあります。These namespaces also contain types that perform compression and decompression on files, and types that enable communication through pipes and serial ports.

ファイルとは、バイトを順序立てて格納する名前付きのコレクションであり、永続ストレージを保有します。A file is an ordered and named collection of bytes that has persistent storage. ファイルを操作するときには、ディレクトリ パス、ディスク ストレージ、ファイル名、ディレクトリ名を操作します。When you work with files, you work with directory paths, disk storage, and file and directory names. これに対し、ストリームは、バッキング ストアの読み取りと書き込みに使用できるバイトのシーケンスです。バッキング ストアは、複数のストレージ メディアのいずれかになります (たとえば、ディスク、メモリ)。In contrast, a stream is a sequence of bytes that you can use to read from and write to a backing store, which can be one of several storage mediums (for example, disks or memory). ディスク以外にいくつかのバッキング ストアが存在するのと同じように、ファイル ストリーム以外にも、ネットワーク ストリーム、メモリ ストリーム、パイプ ストリームなど、さまざまなストリームが存在します。Just as there are several backing stores other than disks, there are several kinds of streams other than file streams, such as network, memory, and pipe streams.

ファイルとディレクトリFiles and Directories

System.IO 名前空間の型を使用して、ファイルとディレクトリを操作できます。You can use the types in the System.IO namespace to interact with files and directories. たとえば、ファイルとディレクトリに対するプロパティを取得および設定したり、検索条件に基づいて、ファイルとディレクトリのコレクションを取得したりできます。For example, you can get and set properties for files and directories, and retrieve collections of files and directories based on search criteria.

一般的なファイルおよびディレクトリのクラスを次に示します。Here are some commonly used file and directory classes:

  • File - ファイルを作成、コピー、削除、移動、およびオープンするための静的メソッドを提供し、FileStream オブジェクトの作成を支援します。File - provides static methods for creating, copying, deleting, moving, and opening files, and helps create a FileStream object.

  • FileInfo - ファイルを作成、コピー、削除、移動、およびオープンするためのインスタンス メソッドを提供し、FileStream オブジェクトの作成を支援します。FileInfo - provides instance methods for creating, copying, deleting, moving, and opening files, and helps create a FileStream object.

  • Directory - ディレクトリやサブディレクトリを作成、移動、および反復処理するための静的メソッドを提供します。Directory - provides static methods for creating, moving, and enumerating through directories and subdirectories.

  • DirectoryInfo - ディレクトリやサブディレクトリを作成、移動、および反復処理するためのインスタンス メソッドを提供します。DirectoryInfo - provides instance methods for creating, moving, and enumerating through directories and subdirectories.

  • Path - 複数のプラットフォームにまたがってディレクトリ文字列を処理するためのメソッドおよびプロパティを提供します。Path - provides methods and properties for processing directory strings in a cross-platform manner.

これらのクラスに加えて、Visual Basic のユーザーは、ファイル I/O 用の Microsoft.VisualBasic.FileIO.FileSystem クラスに用意されているメソッドとプロパティを使用できます。In addition to using these classes, Visual Basic users can use the methods and properties provided by the Microsoft.VisualBasic.FileIO.FileSystem class for file I/O.

方法: ディレクトリをコピーする」、「方法: ディレクトリ リストを作成する」、および「方法: ディレクトリとファイルを列挙する」を参照してください。See How to: Copy Directories, How to: Create a Directory Listing, and How to: Enumerate Directories and Files.

ストリームStreams

抽象基底クラス Stream は、バイトの読み取りと書き込みをサポートします。The abstract base class Stream supports reading and writing bytes. ストリームを表すすべてのクラスは、Stream クラスから継承されます。All classes that represent streams inherit from the Stream class. Stream クラスとその派生クラスは、データ ソースやリポジトリの共通ビューを提供し、プログラマがオペレーティング システムや基になるデバイスに固有の詳細事項を考慮する必要をなくします。The Stream class and its derived classes provide a common view of data sources and repositories, and isolate the programmer from the specific details of the operating system and underlying devices.

ストリームには次の 3 つの基本的な操作が含まれます。Streams involve three fundamental operations:

  • 読み取り - ストリームからバイト配列などのデータ構造体にデータを転送します。Reading - transferring data from a stream into a data structure, such as an array of bytes.

  • 書き込み - データ ソースからストリームにデータを転送します。Writing - transferring data to a stream from a data source.

  • シーク - ストリーム内の現在位置を照会および変更します。Seeking - querying and modifying the current position within a stream.

基になるデータ ソースまたはリポジトリによっては、ストリームがサポートできる機能が上記の一部に限られる場合があります。Depending on the underlying data source or repository, a stream might support only some of these capabilities. たとえば、PipeStream クラスは、シークをサポートしません。For example, the PipeStream class does not support seeking. ストリームの CanReadCanWrite、および CanSeek の各プロパティで、そのストリームがサポートする操作を指定します。The CanRead, CanWrite, and CanSeek properties of a stream specify the operations that the stream supports.

一般的なストリーム クラスを次に示します。Here are some commonly used stream classes:

  • FileStream – ファイルの読み取りと書き込みを実行します。FileStream – for reading and writing to a file.

  • IsolatedStorageFileStream – 分離ストレージのファイルの読み取りと書き込みを実行します。IsolatedStorageFileStream – for reading and writing to a file in isolated storage.

  • MemoryStream – バッキング ストアとしてメモリの読み取りと書き込みを実行します。MemoryStream – for reading and writing to memory as the backing store.

  • BufferedStream – 読み取り操作と書き込み操作のパフォーマンスを向上します。BufferedStream – for improving performance of read and write operations.

  • NetworkStream – ネットワーク ソケットを介して読み取りと書き込みを実行します。NetworkStream – for reading and writing over network sockets.

  • PipeStream – 匿名パイプと名前付きパイプを介して読み取りと書き込みを実行します。PipeStream – for reading and writing over anonymous and named pipes.

  • CryptoStream – データ ストリームを暗号変換にリンクします。CryptoStream – for linking data streams to cryptographic transformations.

ストリームを非同期的に操作する例については、「非同期ファイル I/O」を参照してください。For an example of working with streams asynchronously, see Asynchronous File I/O.

リーダーとライターReaders and Writers

System.IO 名前空間には、ストリームからエンコードされた文字を読み取ったり、ストリームに書き込んだりするための型も用意されています。The System.IO namespace also provides types for reading encoded characters from streams and writing them to streams. 通常、ストリームはバイトの入出力用に設計されています。Typically, streams are designed for byte input and output. リーダー型とライター型は、ストリームが操作を完了できるように、バイトとの間でエンコードされた文字の変換を処理します。The reader and writer types handle the conversion of the encoded characters to and from bytes so the stream can complete the operation. 各リーダー クラスとライター クラスは、クラスの BaseStream プロパティから取得できるストリームに関連付けられます。Each reader and writer class is associated with a stream, which can be retrieved through the class's BaseStream property.

一般的なリーダー クラスとライター クラスを次に示します。Here are some commonly used reader and writer classes:

  • BinaryReader および BinaryWriter – バイナリ値としてプリミティブ データ型の読み取りと書き込みを実行します。BinaryReader and BinaryWriter – for reading and writing primitive data types as binary values.

  • StreamReader および StreamWriter – 文字とバイトを相互変換するエンコーディング値を使用して、文字の読み取りと書き込みを実行します。StreamReader and StreamWriter – for reading and writing characters by using an encoding value to convert the characters to and from bytes.

  • StringReader および StringWriter – 文字列から文字を読み取り、文字列に文字を書き込みます。StringReader and StringWriter – for reading and writing characters to and from strings.

  • TextReader および TextWriter – バイナリ データを除く、文字と文字列の読み取りと書き込みを行う他のリーダーとライターの抽象基底クラスとして機能します。TextReader and TextWriter – serve as the abstract base classes for other readers and writers that read and write characters and strings, but not binary data.

方法: ファイルからテキストを読み取る」、「方法: ファイルにテキストを書き込む」、「方法: 文字列から文字を読み取る」、および「方法: 文字列に文字を書き込む」を参照してください。See How to: Read Text from a File, How to: Write Text to a File, How to: Read Characters from a String, and How to: Write Characters to a String.

非同期 I/O 操作Asynchronous I/O Operations

大量のデータを読み取ったり書き込んだりすると、リソースが大量に消費されることがあります。Reading or writing a large amount of data can be resource-intensive. アプリケーションのユーザーに対する応答性を維持する必要がある場合は、これらのタスクを非同期的に実行する必要があります。You should perform these tasks asynchronously if your application needs to remain responsive to the user. 同期 I/O 操作の場合、大量のリソースを消費する操作が完了するまで UI スレッドがブロックされます。With synchronous I/O operations, the UI thread is blocked until the resource-intensive operation has completed. Windows 8.x ストアWindows 8.x Store アプリを開発するときには非同期 I/O 操作を使用して、アプリが動作しなくなったと受け取られないようにします。Use asynchronous I/O operations when developing Windows 8.x ストアWindows 8.x Store apps to prevent creating the impression that your app has stopped working.

AsyncCopyToAsyncFlushAsync、および ReadAsync の各メソッドのように、非同期メンバーの名前には WriteAsync が含まれています。The asynchronous members contain Async in their names, such as the CopyToAsync, FlushAsync, ReadAsync, and WriteAsync methods. これらのメソッドは、async キーワードおよび await キーワードと共に使用します。You use these methods with the async and await keywords.

詳細については、「非同期ファイル I/O」を参照してください。For more information, see Asynchronous File I/O.

[圧縮]Compression

圧縮とは、保管するためにファイルのサイズを小さくするプロセスのことです。Compression refers to the process of reducing the size of a file for storage. 圧縮解除は、圧縮ファイルの内容を抽出し、その内容を使用可能な形式にするプロセスです。Decompression is the process of extracting the contents of a compressed file so they are in a usable format. System.IO.Compression 名前空間には、ファイルおよびストリームを圧縮および圧縮解除するための型が含まれています。The System.IO.Compression namespace contains types for compressing and decompressing files and streams.

次のクラスは、ファイルおよびストリームを圧縮および圧縮解除するときによく使用します。The following classes are frequently used when compressing and decompressing files and streams:

  • ZipArchive – ZIP アーカイブのエントリを作成および取得します。ZipArchive – for creating and retrieving entries in the zip archive.

  • ZipArchiveEntry – 圧縮ファイルを表します。ZipArchiveEntry – for representing a compressed file.

  • ZipFile – 圧縮パッケージの作成、抽出、およびオープンを行います。ZipFile – for creating, extracting, and opening a compressed package.

  • ZipFileExtensions – 圧縮パッケージのエントリを作成および抽出します。ZipFileExtensions – for creating and extracting entries in a compressed package.

  • DeflateStream – Deflate アルゴリズムを使用してストリームを圧縮および圧縮解除します。DeflateStream – for compressing and decompressing streams using the Deflate algorithm.

  • GZipStream – gzip データ形式のストリームを圧縮および圧縮解除します。GZipStream – for compressing and decompressing streams in gzip data format.

方法: ファイルを圧縮して抽出する」を参照してください。See How to: Compress and Extract Files.

分離ストレージIsolated Storage

分離ストレージは、コードと保存データを関連付ける標準化された方法を定義することにより、分離性と安全性を提供するデータ ストレージ機構です。Isolated storage is a data storage mechanism that provides isolation and safety by defining standardized ways of associating code with saved data. ストレージは、ユーザー、アセンブリ、および (必要に応じて) ドメイン別に分離された仮想ファイル システムを提供します。The storage provides a virtual file system that is isolated by user, assembly, and (optionally) domain. 分離ストレージは、アプリケーションにユーザー ファイルへのアクセス許可がない場合に特に便利です。Isolated storage is particularly useful when your application does not have permission to access user files. コンピューターのセキュリティ ポリシーによって制御される方法でアプリケーションの設定またはファイルを保存できます。You can save settings or files for your application in a manner that is controlled by the computer's security policy.

分離ストレージは Windows 8.x ストアWindows 8.x Store アプリには使用できません。代わりに、Windows.Storage 名前空間のアプリケーション データ クラスを使用します。Isolated storage is not available for Windows 8.x ストアWindows 8.x Store apps; instead, use application data classes in the Windows.Storage namespace. 詳細については、Windows デベロッパー センターのアプリケーション データに関する説明を参照してください。For more information, see Application data in the Windows Dev Center.

次のクラスは、分離ストレージを実装するときによく使用します。The following classes are frequently used when implementing isolated storage:

分離ストレージ」を参照してください。See Isolated Storage.

Windows ストア アプリの I/O 操作I/O Operations in Windows Store apps

Windows 8.x ストア アプリ用 .NET.NET for Windows 8.x Store apps には、ストリームの読み取りと書き込みを行うための型の多くが含まれています。ただし、このセットにすべての .NET Framework I/O 型が含まれているわけではありません。The Windows 8.x ストア アプリ用 .NET.NET for Windows 8.x Store apps contains many of the types for reading from and writing to streams; however, this set does not include all the .NET Framework I/O types.

次に、I/O 操作を Windows 8.x ストアWindows 8.x Store アプリで使用する場合に注意する必要がある重要な違いを示します。Some important differences to note when using I/O operations in Windows 8.x ストアWindows 8.x Store apps:

必要に応じて、.NET Framework ストリームと Windows ランタイム ストリームを変換できます。You can convert between .NET Framework streams and Windows Runtime streams, if necessary. 詳細については、「方法: .NET Framework ストリームと Windows ランタイム ストリームの間で変換を行う」または「System.IO.WindowsRuntimeStreamExtensions」を参照してください。For more information, see How to: Convert Between .NET Framework Streams and Windows Runtime Streams or System.IO.WindowsRuntimeStreamExtensions.

Windows 8.x ストアWindows 8.x Store アプリでの I/O 操作の詳細については、「Quickstart: Reading and writing files (XAML)」 (クイック スタート: ファイルの読み取りと書き込み) を参照してください。For more information about I/O operations in a Windows 8.x ストアWindows 8.x Store app, see Quickstart: Reading and writing files.

I/O とセキュリティI/O and Security

System.IO 名前空間のクラスを使用する場合、アクセス制御リスト (ACL: Access Control List) などのオペレーティング システムのセキュリティ要件に従い、ファイルとディレクトリへのアクセスを制御する必要があります。When you use the classes in the System.IO namespace, you must follow operating system security requirements such as access control lists (ACLs) to control access to files and directories. この要件の他にも、FileIOPermission で指定されている要件を満たす必要があります。This requirement is in addition to any FileIOPermission requirements. ACL はプログラムで管理できます。You can manage ACLs programmatically. 詳細については、「方法: アクセス制御リスト エントリを追加または削除する」を参照してください。For more information, see How to: Add or Remove Access Control List Entries.

既定のセキュリティ ポリシーでは、インターネットまたはイントラネットのアプリケーションはユーザーのコンピューターのファイルにアクセスできません。Default security policies prevent Internet or intranet applications from accessing files on the user’s computer. したがって、インターネットまたはイントラネットを経由してダウンロードされるコードを記述する場合に、物理ファイル パスを必要とする I/O クラスを使用しないでください。Therefore, do not use the I/O classes that require a path to a physical file when writing code that will be downloaded over the Internet or intranet. 代わりに、従来の .NET Framework アプリケーション用の分離ストレージを使用するか、Windows 8.x ストアWindows 8.x Store アプリ用のアプリケーション データを使用します。Instead, use isolated storage for traditional .NET Framework applications, or use application data for Windows 8.x ストアWindows 8.x Store apps.

セキュリティ チェックが実行されるのは、ストリームが構築されている場合だけです。A security check is performed only when the stream is constructed. したがって、ストリームを開いて、そのストリームを信頼度の低いコードやアプリケーション ドメインに渡さないでください。Therefore, do not open a stream and then pass it to less-trusted code or application domains.

ファイル、ディレクトリ、およびストリームに関連する I/O タスクの一覧、および各タスクの関連するコンテンツと例へのリンクを示します。Provides a list of I/O tasks associated with files, directories, and streams, and links to relevant content and examples for each task.

非同期 I/O のパフォーマンス上の利点と基本的な操作について説明します。Describes the performance advantages and basic operation of asynchronous I/O.

コードと保存データを関連付ける標準的な方法を定義することにより、分離性と安全性を提供するデータ ストレージ機構について説明します。Describes a data storage mechanism that provides isolation and safety by defining standardized ways of associating code with saved data.

.NET Framework での匿名パイプ操作と名前付きパイプ操作について説明します。Describes anonymous and named pipe operations in the .NET Framework.

ディスク上のファイルの内容を仮想メモリ内に格納するメモリ マップト ファイルについて説明します。Describes memory-mapped files, which contain the contents of files on disk in virtual memory. メモリ マップト ファイルは、非常に大きなファイルを編集したり、プロセス間通信用の共有メモリを作成したりするために使用できます。You can use memory-mapped files to edit very large files and to create shared memory for interprocess communication.