コンピュータプログラミングの流れとは
コンピュータプログラミングでは、ストリームはクラスのオブジェクトであり、多くのファイルの入出力操作は、クラスのメンバー関数の形式で提供されます。
C#には、さまざまなソース(ファイル、メモリ、ネットワーク、分離ストレージなど)から読み取り/書き込みが可能な次の標準IO(入力/出力)クラスが含まれています。
ストリーム:System.IO.Streamは、バイト(読み取り、書き込みなど)をソースに転送するための標準メソッドを提供する抽象クラスです。ラッパークラスと同じようにバイトを転送します。特定のソースからバイトを読み書きする必要があるクラスは、Streamクラスを実装する必要があります。
次のクラスはStreamクラスを継承して、特定のソースからバイトを読み書きする機能を提供します。
- FileStream:.txt、.exe、.jpg、またはその他のファイルであるかどうかに関係なく、物理ファイルからバイトを読み取るか、物理ファイルにバイトを書き込みます。FileStreamは、Streamクラスから派生しています。
- MemoryStream:MemoryStreamは、メモリに格納されているバイトを読み書きします。
- BufferedStream:BufferedStreamは、特定のI / O操作のパフォーマンスを向上させるために、他のストリームからバイトを読み書きします。
- NetworkStream:NetworkStreamは、ネットワークソケットからバイトを読み書きします。
- PipeStream:PipeStreamは、さまざまなプロセスからバイトを読み書きします。
- CryptoStream:CryptoStreamは、データストリームを暗号化変換にリンクするために使用されます。
C#StreamReaderクラス:ファイルの読み取り
C#言語では、StreamReaderクラスを使用してストリームから文字列を読み取ります。TextReaderクラスから継承します。treamReaderクラスには多くの構築メソッドがあります。次の図に示すように、一般的に使用される構築メソッドをいくつか示します。
テーブルの構築メソッドを使用してStreamReaderクラスのインスタンスを作成し、インスタンスによって提供されるクラスメンバーを呼び出してファイルを読み取ります。次の図に、StreamReaderクラスの一般的なプロパティとメソッドを示します。
例:
using System;
using System.IO;
namespace MySpace
{
class Program
{
static void Main(string[] args)
{
//定义文件路径
string path = @"E:\test\test.txt";
//创建StreamReader对象
StreamReader streamReader = new StreamReader(path);
//获取流中的下一个字节的整数,如果没有获取到字符,则返回-1
//获取获取全部字节
while(streamReader.Peek() != -1)
{
//从当前流中读取一行字符并将数据作为字符串返回
string str = streamReader.ReadLine();
Console.WriteLine(str);
}
//关闭流
streamReader.Close();
Console.ReadKey();
}
}
}
演算結果:
C#StreamWriterクラス:ファイルの書き込み
StreamReaderクラスはStreamWriterクラスに対応します。StreamWriterクラスは主にストリームにデータを書き込むために使用されます。
StreamWriterクラスには多くの構築メソッドもあります。次の図に示すように、一般的に使用される構築メソッドの一部を以下に示します。
StreamWriterクラスのインスタンスを作成した後、そのクラスメンバーを呼び出して、ファイルに情報を書き込む操作を完了することができます。次の図に、StreamWriterクラスで一般的に使用されるプロパティとメソッドを示します。
Write、WriteAsync、およびWriteLineAsyncメソッドにも、ここにリストされていないさまざまなタイプの書き込みに対して多くのオーバーロードがあります。
例:
using System;
using System.IO;
namespace MySpace
{
class Program
{
static void Main(string[] args)
{
string path = @"E:\test\test.txt";
//创建一个StreamWriter的对象
StreamWriter streamWriter = new StreamWriter(path);
//向文件中写入一个行
streamWriter.WriteLine("QQ:");
streamWriter.WriteLine("845264718");
//刷新缓冲
streamWriter.Flush();
//关闭流
streamWriter.Close();
}
}
}
演算結果:
C#FileStreamクラス:ファイルの読み取りと書き込み
C#言語では、ファイルの読み取りと書き込みのストリームはFileStreamクラスで表されます。FileStreamクラスは主にファイルの読み取りと書き込みに使用されます。通常のテキストファイルの読み取りと書き込みだけでなく、次のようなさまざまな形式のファイルの読み取りも可能です。画像ファイルと音声ファイル。
FileStreamクラスのインスタンスを作成する場合、FileAccess、FileMode、FileShare、FileOptionsなどの複数の列挙値が含まれます。
FileAccess列挙型は、主にファイルのアクセス方法を設定するために使用されます。具体的な列挙値は次のとおりです。
- 読み取り:ファイルを読み取り専用として開きます。
- 書き込み:ファイルを書き込みモードで開きます。
- 読み取り/書き込み:ファイルを読み取り/書き込みモードで開きます。
FileMode列挙型は、主にファイルを開くまたは作成する方法を設定するために使用されます。具体的な列挙値は次のとおりです。
-
CreateNew:新しいファイルを作成します。ファイルがすでに存在する場合、例外がスローされます。作成:ファイルを作成します。ファイルが存在しない場合は、元のファイルを削除して、ファイルを再作成します。
-
開く:既存のファイルを開きます。ファイルが存在しない場合、例外がスローされます。OpenOrCreate:既存のファイルを開きます。ファイルが存在しない場合は、ファイルを作成します。
-
切り捨て:既存のファイルを開き、ファイルの作成日を保持したまま、ファイルの内容をクリアします。ファイルが存在しない場合、例外がスローされます。
-
追加:ファイルにコンテンツを追加するために使用されるファイルを開きます。ファイルが存在しない場合は、新しいファイルを作成します。
FileShare列挙型は、主に、複数のオブジェクトが同じファイルに同時にアクセスする場合のアクセス制御を設定するために使用されます。具体的な列挙値は次のとおりです。
- なし:現在のファイルの共有を拒否します。
- 読み取り:ファイルを後で開いて情報を読み取ることを許可します。
- ReadWrite:ファイルを後で開いて情報を読み書きできるようにします。
- 書き込み:ファイルを後で開いて情報を書き込むことができます。
- 削除:その後のファイルの削除を許可します。
- 継承可能:ファイルハンドルは子プロセスによって継承できます。
FileOptions列挙型は、ファイルが暗号化されているかどうか、アクセス後に削除するかどうかなど、ファイルの詳細オプションを設定するために使用されます。具体的な列挙値は次のとおりです。
- WriteThrough:システムが中間キャッシュを介してディスクに直接書き込む必要があることを示します。
- なし:System.IO.FileStreamオブジェクトを生成するときに他のオプションを使用しないことを示します。
- 暗号化:ファイルが暗号化されており、暗号化に使用されたのと同じユーザーアカウントでのみ復号化できることを示します。
- DeleteOnClose:ファイルが使用されなくなったときにファイルが自動的に削除されることを示します。
- SequentialScan:最初から最後まで順番にファイルにアクセスすることを示します。RandomAccess:ファイルへのランダムアクセスを示します。
- 非同期:ファイルを非同期の読み取りと書き込みに使用できることを示します。
FileStreamクラスには多くの構築メソッドがあります。次の図に示すように、一般的に使用される構築メソッドをいくつか示します。
FileStreamクラスのインスタンスを作成した後、クラスのメンバーを呼び出して、データの読み取りと書き込みの操作を完了することができます。次の図に、FileStreamクラスで一般的に使用されるプロパティとメソッドを示します。
例1:
using System;
using System.IO;
using System.Text;// byte[] bytes = Encoding.UTF8.GetBytes(msg);所用到的名字空间
namespace MySpcae
{
class Program
{
static void Main(string[] args)
{
//定义文件路径
string path = @"E:\test\QQ.txt";
///创建FileStream类的对象
///第一参数path是文件路径
///第二个参数FileMode.OpenOrCreate 打开已存在的文件,不存在就创建
///第三个参数FileAccess.ReadWrite 以读写打开文件
///第四个参数FileShare.ReadWrite 允许随后打开文件读写信息
FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate,
FileAccess.ReadWrite, FileShare.ReadWrite);
string msg = "845264718";
//如果是中文,那么string长度不够用,将数据从字符串类型装换成字节类型
byte[] bytes = Encoding.UTF8.GetBytes(msg);
//从流中读取字节快并将该数据写入给定的缓冲区
//bytes是字节块
//0是位置
//bytes.Length是字节块的大小
fileStream.Write(bytes, 0, bytes.Length);
//刷新缓冲区
fileStream.Flush();
//关闭流
fileStream.Close();
}
}
}
演算結果:
例2:
using System;
using System.IO;
using System.Text;
namespace MySpace
{
class Program
{
static void Main(string[] args)
{
//指定文件路径
string path = @"E:\test\QQ.txt";
//判断是否含有指定文件
if(File.Exists(path))
{
FileStream fileStream = new FileStream(path,
FileMode.Open, FileAccess.Read);
//定义存放文件信息的字节数组
byte[] bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, bytes.Length);
//将得到的字节类型数组重写编码为字符型数组
char[] c = Encoding.UTF8.GetChars(bytes);
Console.WriteLine("My QQ:");
Console.WriteLine(c);
//关闭流
fileStream.Close();
}
else
{
Console.WriteLine("您查看的文件不存在!");
}
Console.ReadKey();
}
}
}
演算結果:
C#BinaryReaderクラス:バイナリファイルを読み取ります
BinaryReaderクラスは、C#でバイナリ形式のデータを読み取るときに使用されます。BinaryReaderクラスには3つの構築メソッドがあり、具体的な構文形式は次のとおりです。
最初の形式:
BinaryReader(Stream input) //其中,input 参数是输入流。
2番目の形式:
BinaryReader(Stream input, Encoding encoding) //其中,input 是指输入流,encoding 是指编码方式。
3番目の形式:
BinaryReader(Stream input, Encoding encoding, bool leaveOpen) //其中,input 是指输入流,encoding 是指编码方式,leaveOpen 是指在流读取后是否包括流的打开状态。
BinaryReaderクラスのインスタンスの作成が完了すると、ファイルをバイナリ形式で読み取ることができます。
BinaryReaderクラスの一般的なプロパティとメソッドを次の図に示します。
BinaryReaderクラスで提供されるメソッドは、ファイル内の指定されたデータ型の値を直接読み取るのではなく、BinaryWriterクラスによってファイルに書き込まれた値を読み取ります。
上記のメソッドの中で、Readメソッドのみが、読み取り値をBinaryWriterクラスによってファイルに書き込む必要はありません。
例1:
using System;
using System.IO;
namespace MySpace
{
class Program
{
static void Main(string[] args)
{
//只读方式创建文件流
FileStream fileStream = new FileStream(@"E:\test\test.txt",
FileMode.Open);
//创建一个BinaryRead的对象
BinaryReader binaryReader = new BinaryReader(fileStream);
//从指定的流中读取字符
int a = binaryReader.Read();
//判断文件中是否含有字符,若不含字节,a的值为-1
while(a != -1)
{
//输出读取到的字符
Console.Write((char)a);
a = binaryReader.Read();
}
Console.WriteLine();
Console.ReadKey();
}
}
}
実行結果:
Readメソッドを使用して一度に1文字を読み取ることに加えて、Readメソッドの他のオーバーロードされたメソッドを使用して、文字をバイト配列または文字配列に読み取ることもできます。
例2:
using System;
using System.IO;
using System.Text;
namespace MySpace
{
class Program
{
static void Main(string[] args)
{
//创建一个文件流对象,设定了打开方式,和只读权限
FileStream fileStream = new FileStream(@"E:\test\test.txt",
FileMode.Open, FileAccess.Read);
//创建一个BinaryReader对象
BinaryReader binaryReader = new BinaryReader(fileStream);
//获取文件长度
long length = fileStream.Length;
byte[] bytes = new byte[length];
//读取的文件内容并保存到字节数组中
binaryReader.Read(bytes, 0, bytes.Length);
//将字节数组转换为字符串
String str = Encoding.Default.GetString(bytes);
Console.WriteLine(str);
Console.ReadKey();
}
}
}
演算結果:
C#BinaryWriterクラス:バイナリデータを書き込む
BinaryWriterクラスは、コンテンツをストリームに書き込むために使用されます。その構築メソッドの具体的な文法形式は次のとおりです。
最初の形式:
BinaryWriter(Stream output)
2番目の形式:
BinaryWriter(Stream output, Encoding encoding)
3番目の形式:
BinaryWriter(Stream output, Encoding encoding, bool leaveOpen)
BinaryWriterクラスで一般的に使用されるプロパティとメソッドを次の図に示します。
上記のメソッドに加えて、Writeメソッドは複数のタイプのオーバーロードされたメソッドも提供します。
例:
using System;
using System.IO;
namespace MySpace
{
class Program
{
static void Main(string[] args)
{
//创建一个文件写入流对象,存在就打开,权限是写
FileStream fileStream = new FileStream(@"E:\test\test.txt",
FileMode.Open, FileAccess.Write);
//创建一个写入二进制流
BinaryWriter binaryWriter = new BinaryWriter(fileStream);
//向文件写入
binaryWriter.Write("一起来学习啊");
binaryWriter.Write(8456264718);
//刷新缓冲区,将缓冲区内容写入文件中
binaryWriter.Flush();
binaryWriter.Close();
//关闭二进制流
fileStream.Close();
//创建一个文件读取流,存在就打开,权限只读
fileStream = new FileStream(@"E:\test\test.txt",
FileMode.Open, FileAccess.Read);
//创建一个二进制读取流
BinaryReader binaryReader = new BinaryReader(fileStream);
//读取数据显示到屏幕
Console.WriteLine(binaryReader.ReadString());
Console.WriteLine(binaryReader.ReadInt64());
//关闭流
binaryReader.Close();
fileStream.Close();
}
}
}
演算結果: