C# データ ストリームの読み取り操作
通常、データ ストリームには読み取り操作と書き込み操作があります。
1. 読み取り (読み取り) 操作: ストリーム オブジェクト内のデータを読み取り、別のデータ構造に格納します。
2. 書き込み操作: 別のデータ構造からデータを読み取り、ストリーム オブジェクトに格納します。
1.すべてのファイルタイプの読み取りと書き込み
ファイル ストリーム (FileStream) クラスは、ファイルの読み取りと書き込みに使用されます。
FileStream クラスの構築には多くの形式がありますが、最も一般的に使用されるものは次のとおりです。
public FileStream(string path, FileMode mode, FileAccess access);
其中,path表示将要操作的文件路径,而参数mode和access都是一个枚举值。
FileMode クラスの列挙メンバー:
列挙値 | ファイルの存在説明 | ファイルが存在しません |
---|---|---|
追加 | オープンとポジションエンド | 新しいファイルを作成 |
作成 | ファイルを書き換える | 新しいファイルを作成 |
新しく作る | 異常な | 新しいファイルを作成 |
開ける | ファイルを開く | 異常な |
開くか作成する | ファイルを開く | 新しいファイルを作成 |
切り捨てる | ファイルを 0 バイトに切り捨てます | 異常な |
FileAccess クラスの列挙メンバー:
列挙値 | 例証する |
---|---|
読む | 読み取り専用モード |
書く | 書き込み専用モード |
読み書き | 読み書きモード |
C# Getting Started Basics.pdfファイル caseをコピーします。
string path = @"C:\Users\Administrator\Desktop\C#入门基础.pdf";
string copyPath = @"C:\Users\Administrator\Desktop\C#入土教程.pdf";
FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read);
FileStream fsWriter = new FileStream(copyPath, FileMode.OpenOrCreate, FileAccess.Write);
while (true)
{
byte[] buffer = new byte[1024 * 1024 * 5];//一次读取5M内容
int r = fsRead.Read(buffer, 0, buffer.Length);//实际读取的有效字节数
if (r == 0)//读到最后内容
{
break;
}
//以ANSI默认格式读取文本内容
//string tempStr = Encoding.Default.GetString(buffer, 0, r);
//Console.WriteLine(tempStr);
fsWriter.Write(buffer, 0, r);
}
//关闭流
fsWriter.Close();
//释放流占用的资源
fsWriter.Dispose();
//关闭流
fsRead.Close();
//释放流占用的资源
fsRead.Dispose();
Console.WriteLine("复制完成.");
C# は [ using ] を使用して、ストリームを自動的に閉じ、ストリームが占有しているリソースを解放します。
string path = @"C:\Users\Administrator\Desktop\C#入门基础.pdf";
string copyPath = @"C:\Users\Administrator\Desktop\C#入土教程.pdf";
//将创建文件流对象的过程写在using当中,会自动关闭流并释放流占用的资源
using (FileStream fsRead = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read))
{
using (FileStream fsWrite = new FileStream(copyPath, FileMode.OpenOrCreate, FileAccess.Write))
{
while(true)
{
byte[] buffer = new byte[1024 * 1024 * 5];
int r = fsRead.Read(buffer, 0, buffer.Length);
if(r == 0)
{
break;
}
fsWrite.Write(buffer, 0, r);
}
}
}
Console.WriteLine("复制完成.");
2. テキストファイルの読み書き
テキスト ファイルの場合、通常、次の 2 つのクラスが処理に使用されます。
StreamReaderクラスは、テキスト ファイルの内容を直接読み取ることができます。
StreamWriterクラスは、文字や文字列を直接ファイルに書き込めるため、テキストファイルの書き込みに使用するのが一般的です。
StreamRead はテキスト ファイルを読み取ります。
string path = @"C:\Users\Administrator\Desktop\a.txt";
//采用默认ANSI编码格式进行读取
using (StreamReader sr = new StreamReader(path, Encoding.Default))
{
//在读取末端进行判断,并循环读取
while (!sr.EndOfStream)
{
//输出每一行读取的内容
Console.WriteLine(sr.ReadLine());
}
}
StreamWriter はテキスト ファイルに書き込みます。
string path = @"C:\Users\Administrator\Desktop\a.txt";
//第二参数:默认false,可以不写,表示覆盖内容。true表示为文件追加内容
using (StreamWriter sw = new StreamWriter(path, true))
{
sw.Write("追加内容");
sw.WriteLine("追加内容");
}
Console.WriteLine("写入完成.");
3. バイナリファイルの読み書き
バイナリ ファイルの場合、通常、次の 2 つのクラスが処理に使用されます。
BinaryReaderクラスはバイナリ ファイルの読み取りに使用され、処理はバイナリ ファイルである必要があります。
BinaryWriterクラスは、バイナリ ファイルの書き込みに使用されます。書き込まれたファイルはバイナリ ファイルではない可能性があります。
BinaryReader はバイナリ ファイルを読み取ります。
string path = @"C:\Users\Administrator\Desktop\a.txt";
using (BinaryWriter bw = new BinaryWriter(new FileStream(path, FileMode.OpenOrCreate)))
{
bw.Write("写入内容.");
}
Console.WriteLine("写入成功");
BinaryWriter はファイルに次のように書き込みます。
string path = @"C:\Users\Administrator\Desktop\a.txt";
using (BinaryReader br = new BinaryReader(new FileStream(path, FileMode.OpenOrCreate)))
{
Console.WriteLine(br.ReadString());
}
著者のエネルギーが限られているため、記事には間違いや脱落が避けられませんが、専門家やネチズンは私を批判して修正することを歓迎します。