C# - よく使うクラス - System.IO - FileStream

クラウディア 
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」にしてから、書き込めばいいだけの話であった。
earthcar(アースカー)
損保との違い
Amazonギフトカード