C# I/O 类
System.IO命名空间包含用于文件操作的各种类,例如创建、删除、读取和写入文件。如下表所示:
| 输入/输出类 | 解释 |
|---|---|
| 二进制阅读器 | 从二进制流中读取原始数据 |
| 二进制写入器 | 以二进制格式写入原始数据 |
| 缓冲流 | 字节流的临时存储 |
| 目录 | 复制、移动、重命名、创建和删除目录 |
| 目录信息 | 用于对目录执行操作 |
| 驱动器信息 | 获取驱动器信息 |
| 文件 | 处理文件 |
| 文件信息 | 对文件执行操作 |
| 文件流 | 用于在文件中的任何位置读取和写入 |
| 内存流 | 用于随机访问存储在内存中的数据流 |
| 小路 | 对路径信息进行操作 |
| 流阅读器 | 用于从字节流中读取字符 |
| 流写入器 | 用于将字符写入流 |
| 字符串读取器 | 用于从字符串缓冲区读取数据 |
| 字符串编写器 | 用于将数据写入字符串缓冲区 |
文件流类
System.IO 命名空间中的 FileStream 类。用它来读取、写入和关闭文件。创建 FileStream 类对象的语法是:
FileStream <object_name> = new FileStream(<file_name>, <FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>);
参数解释如下:
- object_name:创建的对象的名称。
- file_name:文件路径(包括文件名);
- 文件模式:枚举。用于设置文件打开方式。选项值为:
- 追加:打开现有文件并将光标置于文件末尾。如果该文件不存在,则创建该文件。
- 创建:创建一个新文件。如果该文件已存在,请删除旧文件,然后创建新文件。
- CreateNew:创建一个新文件。如果文件已经存在,则会抛出异常。
- 打开:打开现有文件。如果文件不存在,则会抛出异常。
- OpenOrCreate:打开现有文件。如果该文件不存在,则创建并打开一个新文件。
- 截断:打开现有文件,然后清除该文件(删除原始内容),如果文件不存在,则抛出异常。
- 文件访问:枚举。用于配置文件访问。可选值为Read、ReadWrite、Write。
- 文件共享:枚举。用于设置文件权限。选项值为:
- 可继承:允许子进程继承文件句柄。 Win32 不直接支持此功能。
- None:拒绝共享当前文件,直到文件关闭,并且打开文件的请求(通过此进程或另一个进程)失败。
- 读取:允许打开文件进行读取。如果未指定此标志,则在关闭文件之前打开文件进行读取的任何请求都将失败。请注意,即使指定了此标志,附加权限仍然有效。必需的。能够访问该文件。
- ReadWrite:允许打开文件进行读取或写入。如果未指定此标志,则在关闭文件之前打开文件进行读取或写入的请求将失败。即使指定了此标志,也需要额外的权限才能访问该文件。
- 写入:允许打开文件进行写入。如果未指定此标志,则打开文件进行写入的请求将失败,直到文件关闭为止。请注意,即使指定了此标志,附加权限可能仍然存在。您必须能够访问该文件。
- 删除:允许随后删除该文件。
例如,创建一个FileStream对象F来读取名为sample.txt的文件。示例代码如下。
FileStream F = new FileStream(“sample.txt”, FileMode.Open, FileAccess.Read, FileShare.Read);
FileStream类的常用方法有:
| 方法 | 解释 |
|---|---|
| Close() | 关闭当前流并释放与其关联的所有资源(例如套接字和文件句柄)。 |
| CopyTo(Stream) | 从当前流中读取字节并写入另一个流 |
| Dispose() | 释放流使用的所有资源 |
| Equals(Object) | 判断指定对象是否等于当前对象 |
| Finalize() | 使垃圾收集器在重用 FileStream 时释放资源并执行其他清理操作。 |
| Flush() | 清除该流的缓冲区并将所有缓冲数据写入文件。 |
| GetHashCode() | 默认哈希函数 |
| GetType() | 获取当前实例的类型 |
| Lock(Int64, Int64) | 阻止其他进程读取或写入 FileStream |
| Read(Byte[], Int32, Int32) | 从流中读取一大块字节并将数据写入指定的缓冲区 |
| ReadByte() | 从文件中读取 1 个字节并将读取位置前进 1 个字节 |
| ToString() | 返回表示当前对象的字符串。 |
| Unlock(Int64, Int64) | 允许其他进程访问先前锁定的文件的全部或部分 |
| Write(Byte[], Int32, Int32) | 将一大块字节写入文件流 |
| WriteByte(Byte) | 将一个字节写入文件流中的当前位置 |
[示例] 使用FileStream类加载指定文件。
using System;
using System.IO;
namespace it-kiso.com
{
class Demo
{
static void Main(string[] args)
{
FileStream file = new FileStream("test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
for(int i = 0; i < 20; i++){
file.WriteByte((byte)i);
}
file.Position = 0;
for(int i = 0; i < 20; i++){
Console.Write(file.ReadByte() + " ");
}
file.Close();
Console.ReadKey();
}
}
} 操作的结果将是:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
C# 读写日语文件
System.IO 命名空间中的 StreamReader 和 StreamWriter 类可用于读取数据并将数据写入文本文件。这些类继承自抽象基类Stream,提供了读写文件流的功能。
1) 流阅读器
StreamReader 类继承自抽象基类 TextReader,用于从文件中读取字符序列。下表列出了 StreamReader 类中的一些常用方法。
| 方法 | 解释 |
|---|---|
| public override void Close() | 关闭 StreamReader 对象和底层流,释放其关联的系统资源。 |
| public override int Peek() | 返回下一个可用字符,但未使用它 |
| public override int Read() | 从输入流中读取下一个字符并将字符位置前进一个字符。 |
如果您想查看完整的方法列表,请访问C# 官方网站上的文档。
【示例】如果使用StreamReader读取指定文件的内容,则该文件的内容如下。
IT基礎
https://it-kiso.com/
C# チュートリアル
示例代码如下。
using System;
using System.IO;
namespace it-kiso.com
{
class Demo
{
static void Main(string[] args)
{
try{
// StreamReaderクラスのオブジェクトを作成する
StreamReader file = new StreamReader("test.txt");
string line;
// ファイルから内容を読む
while((line = file.ReadLine()) != null){
Console.WriteLine(line);
}
}catch(Exception e){
// エラーメッセージを表示する
Console.WriteLine("ファイルを読み取れません");
Console.WriteLine(e.Message);
}
Console.ReadKey();
}
}
} 运行上面的代码,输出文件的内容。
2) 流写入器
StreamWriter类也继承自抽象类TextWriter,用于将字符序列写入文件。下表列出了 StreamWriter 类中一些常用的方法。
| 方法 | 解释 |
|---|---|
| public override void Close() | 关闭当前 StreamWriter 对象和底层流 |
| public override void Flush() | 清除所有当前缓冲区,以便将所有缓冲数据写入底层流。 |
| public virtual void Write(bool value) | 将布尔值的文本表示形式写入文本流 |
| public override void Write(char value) | 将一个字符写入流 |
| public virtual void Write(decimal value) | 将十进制值的文本表示形式写入文本流 |
| public virtual void Write(double value) | 将 8 字节浮点值的文本表示形式写入文本流 |
| public virtual void Write(int value) | 将 4 字节有符号整数的文本表示形式写入文本流 |
| public override void Write(string value) | 将字符串写入文本流 |
| public virtual void WriteLine() | 将行尾字符写入文本流 |
有关方法的完整列表,请参阅官方 C# 文档。
[示例] 将指定内容写入文件。
using System;
using System.IO;
namespace it-kiso.com
{
class Demo
{
static void Main(string[] args)
{
// ファイルに書き込むデータ
string[] str = new string[]{
"IT基礎",
"https://it-kiso.com/",
"C# チュートリアル"
};
// StreamWriterクラスのオブジェクトを作成
StreamWriter file = new StreamWriter("demo.txt");
// 配列のデータをファイルに書き込む
foreach(string s in str){
file.WriteLine(s);
}
file.Close();
// ファイルからの読み取り
string line = "";
StreamReader readfile = new StreamReader("demo.txt");
while((line = readfile.ReadLine()) != null){
Console.WriteLine(line);
}
readfile.Close();
Console.ReadKey();
}
}
} 操作的结果将是:
IT基礎
https://it-kiso.com/
C# チュートリアル

C# BinaryReader 和 BinaryWriter 类可用于读取和写入二进制文件。
1)BinaryReader类
BinaryReader 类用于从文件中读取二进制数据。类中的常用方法有:
| 方法 | 解释 |
|---|---|
| public override void Close() | 关闭 BinaryReader 对象和底层流 |
| public virtual int Read() | 从基础流中读取字符,并根据所使用的编码和从流中读取的特定字符前进流的当前位置。 |
| public virtual bool ReadBoolean() | 从当前流中读取布尔值并将流的当前位置前进一个字节。 |
| public virtual byte ReadByte() | 从当前流中读取下一个字节并将流的当前位置前进一个字节 |
| public virtual byte[] ReadBytes(int count) | 从当前流中将指定数量的字节读取到字节数组中,并将流的当前位置前进指定的字节数。 |
| public virtual char ReadChar() | 从当前流中读取下一个字节,并将流的当前位置前进到所使用的编码和从流中读取的指定字符。 |
| public virtual char[] ReadChars(int count) | 从当前流中读取指定数量的字符,以字符数组的形式返回数据,并根据使用的编码和从流中读取的指定字符将流的当前位置向前移动。 |
| public virtual double ReadDouble() | 从当前流中读取 8 字节浮点值,并将流的当前位置前进 8 个字节。 |
| public virtual int ReadInt32() | 从当前流中读取 4 字节有符号整数,并将流的当前位置前进 4 个字节 |
| public virtual string ReadString() | 从当前流中读取字符串。该字符串以长度为前缀并编码为 7 位整数。 |
有关方法的完整列表,请参阅官方 C# 文档。
2)BinaryWriter类
BinaryWriter 类用于将二进制数据写入文件。下表显示了类中的常用方法。
| 方法 | 解释 |
|---|---|
| public override void Close() | 关闭 BinaryWriter 对象和底层流 |
| public virtual void Flush() | 清除当前写入器的所有缓冲区并将所有缓冲数据写入底层设备。 |
| public virtual long Seek(int offset,SeekOrigin origin) | 设置当前流中的位置 |
| public virtual void Write(bool value) | 将布尔字节写入当前流。 0 表示假,1 表示真 |
| public virtual void Write(byte value) | 将无符号字节写入当前流并将流位置前进一个字节 |
| public virtual void Write(byte[] buffer) | 将字节数组写入底层流 |
| public virtual void Write(char ch) | 将 Unicode 字符写入当前流,根据使用的编码和写入流的指定字符推进流的当前位置。 |
| public virtual void Write(char[] chars) | 将字符数组写入当前流,根据使用的编码和写入流的指定字符推进流的当前位置。 |
| public virtual void Write(double value) | 将 8 字节浮点值写入当前流并将流位置前进 8 个字节。 |
| public virtual void Write(int value) | 将 4 字节有符号整数写入当前流并将流位置前进 4 个字节 |
| public virtual void Write(string value) | 以 BinaryWriter 的当前编码将带长度前缀的字符串写入流,并根据使用的编码和写入流的指定字符推进流的当前位置。 |
有关方法的完整列表,请参阅官方 C# 文档。
[示例] 下面的示例显示了二进制文件的读写。
using System;
using System.IO;
namespace it-kiso.com
{
class Demo
{
static void Main(string[] args)
{
BinaryWriter bw;
BinaryReader br;
int i = 25;
double d = 3.14157;
bool b = true;
string s = "IT基礎";
// ファイルの作成
try{
bw = new BinaryWriter(new FileStream("mydata", FileMode.Create));
}catch (IOException e){
Console.WriteLine(e.Message + "\n ファイルの作成に失敗しました!");
return;
}
// ファイルへの書き込み
try{
bw.Write(i);
bw.Write(d);
bw.Write(b);
bw.Write(s);
}catch (IOException e){
Console.WriteLine(e.Message + "\n ファイルへの書き込みに失敗しました!");
}
bw.Close();
// ファイルの読み込み
try{
br = new BinaryReader(new FileStream("mydata", FileMode.Open));
}catch (IOException e){
Console.WriteLine(e.Message + "\n ファイルのオープンに失敗しました!");
return;
}
try{
i = br.ReadInt32();
Console.WriteLine("Integer data: {0}", i);
d = br.ReadDouble();
Console.WriteLine("Double data: {0}", d);
b = br.ReadBoolean();
Console.WriteLine("Boolean data: {0}", b);
s = br.ReadString();
Console.WriteLine("String data: {0}", s);
}catch (IOException e){
Console.WriteLine(e.Message + "\n ファイルの読み込みに失敗しました!.");
}
br.Close();
Console.ReadKey();
}
}
} 操作的结果将是:
Integer data: 25
Double data: 3.14157
Boolean data: True
String data: IT基礎




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

