最初に明確にすべきことは、FileStreamクラスがバイトとバイト配列で動作することです。
一般的に使用されるコンストラクターの概要
最も単純なコンストラクターには、ファイル名とFileMode列挙値の2つのパラメーターしかありません。
FileStream(fliename , FileMode.<Member>)
別の一般的に使用されるコンストラクターには3つのパラメーターがあり、3番目のパラメーターは、ストリームの役割を指定するFileAccess列挙体のメンバーです
FileStream(fliename , FileMode.<Member> ,FileAccess.<Member>)
FileMode列挙型メンバー:
会員 | ファイルが存在します | ファイルが存在しません |
追加 | ファイルを開き、ストリームはファイルの最後を指し、列挙型FileAccess.Writeと組み合わせてのみ使用できます | 新しいファイルを作成します。列挙型FileAccess.Writeと組み合わせてのみ使用できます |
作成する | ファイルを削除してから、新しいファイルを作成します | 新しいファイルを作成 |
新しく作る | 例外を投げる | 新しいファイルを作成 |
開いた | ファイルを開き、ストリームはファイルの先頭を指します | 例外を投げる |
OpenOrCreate | ファイルを開き、ストリームはファイルの先頭を指します | 新しいファイルを作成 |
切り捨て | ファイルを開き、その内容をクリアします。ストリームはファイルの先頭を指し、元の作成日を保持します | 例外を投げる |
FileAccess列挙型メンバー:
会員 | 解説 |
読んだ | 読み取り専用でファイルを開く |
書く | 書き込み専用でファイルを開く |
読み書き | 読み取りと書き込みのためにファイルを開く |
1.ファイルの場所
FileStreamクラスは、次の読み取りおよび書き込み操作のためにファイル内の場所を指す内部ファイルポインターを維持します。ほとんどの場合、ファイルを開くと、ファイルの先頭を指しますが、このポインターを変更できます。この機能を実現する方法は、Seek()メソッドです。
Seek()メソッドには2つのパラメーターがあります。最初のパラメーターは、ファイルポインターの移動距離(バイト単位)を指定します。2番目のパラメーターは、SeekOrigin列挙値として表される、計算を開始する開始位置を指定します。SeekOrigin列挙には、Begin、Current、Endの3つの値が含まれます。
たとえば、次のとおりです。
FileStream file = File.OpenRead("config.txt");
file.Seek(6,SeekOrigin.Begin);//将文件指针移动到文件的第六个字节处,其起始位置就是文件的第一个字节
file.Seek(6,SeekOrigin.Current);//将指针从当前位置移动6个字节
file.Seek(-6,SeekOrigin.End);//将指针移动到文件的倒数第6个字节
2.データを読み取る
Read()メソッドを使用します。ファイルからデータを読み取り、そのデータをバイト配列に書き込みます。
Read()には3つのパラメーターがあります。最初のパラメーターは、FileStreamオブジェクトにデータを格納するために使用される受信バイト配列です。2番目のパラメーターは、データの書き込みを開始するバイト配列内の位置で、通常は0です。パラメータは、ファイルから読み取るバイト数を指定します
FileStream file = new FileStream("home.txt",FileMode.Open);
byte[] byteData = new byte[1024];
file.Seek(10,SeekOrigin.Begin);
file.Read(byteData,0,1024);//从home.txt文件的第10个字节开始读取1024个字节写入byteData字节数组
3.データを書き込む
Write()メソッドを使用します。バイト配列からデータを読み取り、データをファイルに書き込みます。
Read()メソッドと同様に、Write()メソッドにも3つのパラメーターがあります。
上記の例では、1024バイトがhome.txtのテキストからbyteDataバイト配列に読み込まれ、この配列のデータを新しいファイルに書き込みます。
FileStream newFile = new FileStream("Temp.txt",FileModel.Create);
newFile.Seek(0,SeekOrigin.Begin);
newFile.Write(byteData,0,byteData.Length);//将byteData字节数组里的数据写入到Temp.txt文件中,从第0个字节位置开始