C#のストリーム入出力入門:FileStreamクラスでファイルを読み書きする方法
ストリームとは何か
ストリーム(Stream)とは、通信経路を流れるバイト列(バイトデータの連なり)を抽象化した概念です。C#におけるストリームは、主に次の2種類に分けられます。
- 入力ストリーム(Input Stream):ファイルからデータを読み込むためのストリーム(読み取り操作)
- 出力ストリーム(Output Stream):ファイルへデータを書き込むためのストリーム(書き込み操作)
つまり、ファイルに対する読み書きは、すべてこのストリームを介して行われることになります。
FileStreamクラスの概要
System.IO名前空間に含まれるFileStreamクラスを使用すると、ファイルの読み込み・書き込み・クローズといった一連の操作を簡単に実現できます。FileStreamクラスは、抽象クラスであるStreamを継承した具象クラスです。
新しいファイルを作成したり、既存のファイルを開いたりするには、FileStreamオブジェクトを生成します。その構文は以下のとおりです。
FileStream <object_name> = new FileStream( <file_name>, <FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>);
各パラメータの意味
- <object_name>:作成するFileStreamオブジェクトの変数名
- <file_name>:開く(または新規作成する)ファイルのパスと名前
- <FileMode Enumerator>:ファイルを開く方法を指定する列挙値
- <FileAccess Enumerator>:ファイルへのアクセス権限を指定する列挙値
- <FileShare Enumerator>:他プロセスとの共有方法を指定する列挙値
FileMode列挙体
FileMode列挙体は、ファイルを開く際のさまざまな動作モードを定義します。主なメンバーには、新規作成を行うCreateNew、既存ファイルを開くOpen、存在すれば開き存在しなければ新規作成するOpenOrCreate、内容を上書きするCreateやTruncate、末尾に追記するAppendなどがあります。
FileAccess列挙体
FileAccess列挙体は、ファイルに対するアクセスの種類を指定します。以下の3つのメンバーが用意されています。
- Read:読み取り専用アクセス
- ReadWrite:読み取り・書き込み両方のアクセス
- Write:書き込み専用アクセス
FileShare列挙体
FileShare列挙体は、同じファイルを他のプロセスやストリームとどのように共有できるかを制御します。主なメンバーは以下のとおりです。
- Inheritable:子プロセスがファイルハンドルを継承できる
- Read:他の処理からの読み取りを許可
- ReadWrite:他の処理からの読み取り・書き込みを許可
- Write:他の処理からの書き込みを許可
- None:ファイルの共有を一切許可しない
まとめ
C#のファイル入出力は、Stream抽象クラスを基盤とし、FileStreamクラスを通じて実装されます。FileMode・FileAccess・FileShareという3つの列挙体を適切に組み合わせることで、ファイルを開く際の細かい動作を柔軟に制御できます。ファイル操作を行うアプリケーションを開発する際には、これらの基本概念をしっかり押さえておきましょう。
-
NTFSのファイルストリームとは?仕組みと賢い活用方法を徹底解説
MicrosoftがWindowsを設計した際、ファイルの作成日といった情報を通常の属性として保存する代わりに、あえて隠れた場所に保存する方式を採用しました。この隠れた場所こそが「ファイルストリーム」です。 本記事では、ファイルストリームの基本的な仕組みと、それを効果的に活用する方法について詳しく解説します。 ファイルストリームの基本 Windowsシステム上のすべてのファイルには、アプリケーションが情報を格納できる「既定のストリーム」が標準で備わっています。さらに、1つのファイルに複数のストリーム(「代替データストリーム」とも呼ばれます)を持たせることも可能ですが、実際にこの機能を活用してい
-
Java 8 Streamsチュートリアル – コード例で学ぶStream APIの基本と使い方
この記事では、Java 8のStreams(ストリーム)機能について詳しく解説し、さまざまなコード例を交えながらその使い方を紹介します。 Java StreamsはJavaに関数型プログラミングをもたらす強力な機能です。Java 8から導入されたため、それ以前のバージョンを使用している場合は、Java 8以降へのアップグレードが必要です。 なぜJava Streamsを使うべきなのか? Streamsには以下のようなメリットがあります。 少ないコード量で多くを実現できる — ごくわずかな行数のコードで、従来は多くの記述が必要だった処理を簡潔に実装できます。 ラムダ式を活用できる — 使い捨て