- 1. 概要
- 2. コンストラクタ
- 3. Seek シーク
- 4. SetLength サイズ設定
1. 概要
「偉大なるマイクロソフト様」の説明によれば
同期および非同期の読み取り操作と書き込み操作をサポートするファイル用の Stream を提供します。
とのことです。
わたしは、「VC++」で言うところの「fopen_s」あたりと同等で使用しています。
本ページは、下記のサイトを参考にさせていただきました。
「FileStream クラス (System.IO) 」
「C/C++ と C# のファイル共有モード」
「C#でテキストファイルをクリアする」
2. コンストラクタ
わたしが、最も使用しているのが、下記の形式です。
public FileStream (string path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share);
「string path」で、ファイルのパスおよびファイル名を指定します。
「System.IO.FileMode mode」で、ファイルを開いたり作成したりする方法を指定します。
値 | 意味 | 備考 |
Append | ファイルが存在する場合はそのファイルを開き、ファイルの末尾へ移動します。存在しない場合は新しいファイルを作成します。 | |
Create | 新しいファイルを作成します。ファイルが既に存在する場合は上書きされます。 | |
CreateNew | 新しいファイルを作成します。ファイルが既に存在する場合は「IOException」例外になります。 | |
Open | 既存のファイルを開きます。ァイルが存在しない場合は、「FileNotFoundException」例外になります。 | |
OpenOrCreate | ファイルが存在する場合は、そのファイルを開き、存在しない場合は新しいファイルを作成します。 | |
Truncate | 既存のファイルを開いて、サイズが 0 バイトになるように切り詰めます。 | |
「System.IO.FileAccess access」で、ファイルにアクセスする方法を指定します。
値 | 意味 | 備考 |
Read | 読み取り | |
ReadWrite | 読み取り/書き込み | |
Write | 書き込み | |
「System.IO.FileShare share」で、ファイルに対するプロセスの共有を指定します。
ビットユニークになっているので、「||」でつないで、複数指定できます。
値 | 意味 | 備考 |
Delete | 削除を許可 | |
Inheritable | ファイルハンドルを子プロセスで共有可能 | |
None | 共有を解除 | |
Read | 読み取り共有 | |
ReadWrite | 読み取り/書き込み共有 | |
Write | 書き込み共有 | |
using System;
using System.IO;
public class filestream
{
static public void Main ()
{
using (FileStream fs = new FileStream(@"./Hello.txt", FileMode.Append, FileAccess.Write, FileShare.Write))
using (StreamWriter w = new StreamWriter(fs))
{
w.WriteLine(@"Hello FileStream");
}
}
}
てなソースを書いて実行すると、カレントディレクトリに、中身が下記のテキストのファイルが作成されます。
Hello FileStream
3. Seek シーク
シークとは、なんぞや、と効かれると困っちゃうな。
ウィキペディアでは、「シーク (コンピュータ) - Wikipedia」に書かれていますが、多分、読んでもわからない。
ここでは、開いたファイルのある位置に移動することを言っています(これでも知らない人にはわからない)。
public override long Seek (long offset, System.IO.SeekOrigin origin);
で、一つ目の引数は、二つ目の引数に対する、オフセットだそうです。
二つ目の引数は、下記の値を持ちます。
値 | 意味 | 備考 |
Begin | 開始 | |
Current | 現在位置 | |
End | 末尾 | |
4. SetLength サイズ設定
参考サイトでは、「ストリーム長を特定の値に設定します。」と記述されています。
SetLength (long value);
で「value」にサイズを設定します。
まぁ、わたしの場合、サイズとしては、「0」しか使ったことがないですが。
まぁ、馬鹿をさらしますが。
オーバーライトモードで、オープンした内容が、例えば。
ああああああああああ
という内容のファイルを
いいいいい
と書き換えようと思って、シークして、先頭の位置から「いいいいい」と書いたら
いいいいいあああああ
となっちゃった。
あたり前だわな、オーバーライトなんだから。
この場合、「SetLength」で、サイズを「0」にしてから、書き込めばいいだけの話であった。
|