C#文件读写操作 [详细]

article/2024/5/21 10:43:58

C#文件读写操作

    • C# 中的 I/O 类
    • FileStream 类
    • C#中文本文件的读取写入
      • 1) StreamReader
      • 2) StreamWriter
    • 二进制文件读写
      • 1) BinaryReader 类
      • 2) BinaryWriter 类

文件是存储在磁盘中的具有特定名称和目录路径的数据集合,当我们使用程序对文件进行读取或写入时,程序会将文件以数据流(简称流)的形式读入内存中。我们可以将流看作是通过通信路径传递的字节序列,流主要分为输入流和输出流,输入流主要用于从文件读取数据(读操作),输出流主要用于向文件中写入数据(写操作)。

C# 中的 I/O 类

System.IO 命名空间中包含了各种用于文件操作的类,例如文件的创建、删除、读取、写入等等。如下表中所示:

I/O 类描述
BinaryReader从二进制流中读取原始数据
BinaryWriter以二进制格式写入原始数据
BufferedStream临时存储字节流
Directory对目录进行复制、移动、重命名、创建和删除等操作
DirectoryInfo用于对目录执行操作
DriveInfo获取驱动器的信息
File对文件进行操作
FileInfo用于对文件执行操作
FileStream用于文件中任何位置的读写
MemoryStream用于随机访问存储在内存中的数据流
Path对路径信息执行操作
StreamReader用于从字节流中读取字符
StreamWriter用于向一个流中写入字符
StringReader用于从字符串缓冲区读取数据
StringWriter用于向字符串缓冲区写入数据

FileStream 类

FileStream 类在 System.IO 命名空间下,使用它可以读取、写入和关闭文件。创建 FileStream 类对象的语法格式如下所示:

FileStream <object_name> = new FileStream(<file_name>, <FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>);

参数说明如下:
object_name:创建的对象名称;

file_name:文件的路径(包含文件名在内);

FileMode:枚举类型,用来设定文件的打开方式,可选值如下:

Append:打开一个已有的文件,并将光标放置在文件的末尾。如果文件不存在,则创建文件;

Create:创建一个新的文件,如果文件已存在,则将旧文件删除,然后创建新文件;

CreateNew:创建一个新的文件,如果文件已存在,则抛出异常;

Open:打开一个已有的文件,如果文件不存在,则抛出异常;

OpenOrCreate:打开一个已有的文件,如果文件不存在,则创建一个新的文件并打开;

Truncate:打开一个已有的文件,然后将文件清空(删除原有内容),如果文件不存在,则抛出异常。

FileAccess:枚举类型,用来设置文件的存取,可选值有 Read、ReadWrite 和 Write;

FileShare:枚举类型,用来设置文件的权限,可选值如下:

Inheritable:允许子进程继承文件句柄,Win32 不直接支持此功能;

None:在文件关闭前拒绝共享当前文件,打开该文件的任何请求(由此进程或另一进程发出的请求)都将失败;

Read:允许随后打开文件读取,如果未指定此标志,则文件关闭前,任何打开该文件以进行读取的请求都将失败,需要注意的是,即使指定了此标志,仍需要附加权限才能够访问该文件;

ReadWrite:允许随后打开文件读取或写入,如果未指定此标志,则文件关闭前,任何打开该文件以进行读取或写入的请求都将失败,需要注意的是,即使指定了此标志,仍需要附加权限才能够访问该文件;

Write:允许随后打开文件写入,如果未指定此标志,则文件关闭前,任何打开该文件以进行写入的请求都将失败,需要注意的是,即使指定了此标志,仍可能需要附加权限才能够访问该文件;

Delete:允许随后删除文件。

例如,我们创建一个 FileStream 对象 F 来读取一个名为 sample.txt 的文件,示例代码如下所示:
FileStream F = new FileStream(“sample.txt”, FileMode.Open, FileAccess.Read, FileShare.Read);

FileStream 类中的常用方法如下所示:

方法描述
Close()关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)
CopyTo(Stream)从当前流中读取字节并将其写入到另一流中
Dispose()释放由 Stream 使用的所有资源
Equals(Object)判断指定对象是否等于当前对象
Finalize()确保垃圾回收器回收 FileStream 时释放资源并执行其他清理操作
Flush()清除此流的缓冲区,使得所有缓冲数据都写入到文件中
GetHashCode()默认哈希函数
GetType()获取当前实例的 Type
Lock(Int64, Int64)防止其他进程读取或写入 FileStream
Read(Byte[], Int32, Int32)从流中读取字节块并将该数据写入给定缓冲区中
ReadByte()从文件中读取一个字节,并将读取位置提升一个字节
ToString()返回表示当前对象的字符串
Unlock(Int64, Int64)允许其他进程访问以前锁定的某个文件的全部或部分
Write(Byte[], Int32, Int32)将字节块写入文件流
WriteByte(Byte)将一个字节写入文件流中的当前位置

【示例】使用 FileStream 类读取指定的文件:

using System;
using System.IO;
namespace c.biancheng.net
{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,Stream 类提供了对文件流读写的功能。

1) StreamReader

StreamReader 类继承自抽象基类 TextReader,用来从文件中读取一系列字符,下表列出了 StreamReader 类中一些常用的方法:

方法描述
public override void Close()关闭 StreamReader 对象和基础流,并释放任何与之相关的系统资源
public override int Peek()返回下一个可用的字符,但不使用它
public override int Read()从输入流中读取下一个字符,并把字符位置往前移一个字符

如果想查阅完整的方法列表,可以访问官方API

【示例】使用 StreamReader 读取指定文件的内容,文件的内容如下所示:

薪薪代码
你好
C# 教程

示例代码如下:

using System;
using System.IO;
namespace c.biancheng.net
{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

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()将行结束符写入文本流

完整的方法列表请查阅官方API

【示例】向文件中写入指定内容。

using System;
using System.IO;
namespace c.biancheng.net
{class Demo{static void Main(string[] args) {// 要写入文件中的数据string[] str = new string[]{"薪薪代码","你好","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();}}
}

运行结果如下:

薪薪代码
你好
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 字节浮点值,并把流的当前位置前移八个字节
public virtual int ReadInt32()从当前流中读取一个 4 字节有符号整数,并把流的当前位置前移四个字节
public virtual string ReadString()从当前流中读取一个字符串,字符串以长度作为前缀,同时编码为一个七位的整数

完整的方法列表请查阅 官方API

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 表示 false,1 表示 true
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 字节浮点值写入到当前流中,并把流位置前移八个字节
public virtual void Write(int value)将一个 4 字节有符号整数写入到当前流中,并把流位置前移四个字节
public virtual void Write(string value)将一个有长度前缀的字符串按 BinaryWriter 的当前编码写如到流中,并把流的当前位置按照所使用的编码和要写入到流中的指定字符往前移

完整的方法列表请查阅官方API

【示例】下面通过示例演示二进制文件的读取和写入:

using System;
using System.IO;
namespace c.biancheng.net
{class Demo{static void Main(string[] args) {BinaryWriter bw;BinaryReader br;int i = 520;double d = 3.14159;bool b = true;string s = "薪薪代码";// 创建文件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: 520
Double data: 3.14159
Boolean data: True
String data:薪薪代码

http://chatgpt.dhexx.cn/article/Ra5Vd9o9.shtml

相关文章

File文件读写操作

文章目录 一、文件中常用的函数fopen()fputs()fflush()fclose() 二、使用实例1.读取文件2.写入文件3.main() 总结 一、文件中常用的函数 fopen() 打开文件 fopen(const char* filename, const char* mode)filename&#xff1a;文件名 mode&#xff1a;打开方式&#xff0c;…

Android 文件读写

Android的App可以读写的位置为&#xff1a; 一、内置data目录下对应app名称的目录&#xff1b; 二、扩展SD卡&#xff08;包括虚拟的内置SD卡和外置SD卡&#xff09;&#xff1b; 一、先说说内置data目录下文件的读写。 内置data目录即内部存储&#xff0c;指的是应用内部独有…

c++文件读写

0. 参考 c文件读写&#xff08;很全&#xff09; 1. 简要 C 文件读写很重要&#xff0c;我们经常要面临数据的读写以及读写之后的类型转换&#xff0c;接下来我们就详细的讲解C中的文件读写。 2. 读写步骤 2.1 包含头文件 #include <fstream>2.2 创建流对象 ofstr…

文件的读写基本操作

一、文件是计算机中数据持久化存储的表现形式 读写文件标准操作格式1&#xff1a; 1、打开文件&#xff1a;file1 open(文件名,读写模式) 2、操作文件 3、关闭文件&#xff1a;file1.close()文件操作完毕后必须关闭&#xff0c;否则长期保持对文件的连接状态&#xff0c;造成…

最好懂的python文件读写(详解)

目录 1、文件读写的流程   2、文件读写的几种常见模式(你不清楚的知识点)   3、read、readline、readlines的区别   4、对于一个10G的大文件&#xff0c;怎么高效的查看文件中的内容呢&#xff1f; 1、文件读写的流程 1&#xff09;类比windows中手动操作txt文档&#…

C/C++文件读写(最全方法,多种实现)

文章目录 前言一、文件处理过程二、C处理文件1.打开文件2.读文件4.写文件5.关闭文件 三、C处理文件四、Windows API处理文件五、ATL处理文件总结 C/C实战入门到精通 https://blog.csdn.net/weixin_50964512/article/details/125710864 前言 本章主要详解C/C对文件的所有常…

FTP如何设置用户名密码

1、新建FTP站点&#xff0c;指定名称和物理路径 2、“身份验证”选择 基本&#xff0c;“允许访问”选择 指定用户&#xff0c;下面文本框中输入“本地用户和组”中现有的一个用户名即可。 注意&#xff1a;只能是“本地用户和组”中的用户&#xff0c;自己指定的其他用户名无…

win10系统连接服务器的用户名多少,win10 ftp服务器 用户名和密码

win10 ftp服务器 用户名和密码 内容精选 换一换 CDM支持周期性自动将新增文件上传到OBS&#xff0c;不需要写代码&#xff0c;也不需要用户频繁手动上传即可使用OBS的海量存储能力进行文件备份。这里以CDM周期性备份FTP的文件到OBS为例进行介绍。例如&#xff1a;FTP服务器的to…

Windows下如何搭建FTP服务并且设置其用户名和密码

1. 为了设置用户名和密码&#xff0c;要做一些准备工作&#xff1a; 打开 右键 计算机-》管理-》本地用户和组 右键之后点击新用户&#xff1a; 设置你自己的用户名和密码&#xff0c;这个就是之后给ftp服务用的。 2. 控制面板-》程序和功能-》打开或关闭Windows功能&am…

win10 FTP服务器设置用户名和密码

设置FTP用户及密码之前,请先给电脑添加新的本地账户以及搭建本地ftp服务器。FTP用户及密码就是win10的账户名和密码。 win10添加新的本地账户:https://jingyan.baidu.com/article/b0b63dbf3b38d54a49307046.html 搭建本地FTP服务器:https://blog.csdn.net/feifei_Tang/arti…

用Metasploit破解ftp用户名和密码

Metasploit是渗透测试人员在世界各地的资源和工具&#xff0c;比较常用的命令&#xff1a; msfconsole——直接进入 show options——查看 set RHOSTS ip地址/段 use 路径 需要在虚拟机的2003版本下创建FTP服务 将字典密码文件加入到虚拟机的系统里边 命令 ——rz 查看ftp是…

win7修改ftp服务器密码,win7ftp服务器设置用户名密码设置

win7ftp服务器设置用户名密码设置 内容精选 换一换 登录云服务器的用户名和密码&#xff1a;Windows操作系统用户名&#xff1a;AdministratorLinux操作系统用户名&#xff1a;root如忘记登录密码&#xff0c;可通过 “ 重置密码 ” 功能设置新密码。 代码迁移工具进行代码迁移…

linux下的ftp登陆用户名和密码,Linux下实现ftp普通账号和vip账号限速

ftp工作流程: ftp回话包含了两个通道,控制通道和数据通道,ftp的工作有两种模式,一种是主动模式,一种是被动模式,以ftpserver为参照物,主动模式,服务器主动连接客户端传输,被动模式,等待客户端的连接 主动模式: ftp客户端连接到ftp服务器的21端口,发送用户名和密码,…

抓取FTP登录名和密码

R1配置IP地址 <H3C>system-view [H3C]sysname R1 [R1]int g0/0 [R1-GigabitEthernet0/0]ip address 1.1.1.1 24 R2配置IP地址 <H3C>system-view [H3C]sysname R2 [R1]int g0/1 [R2-GigabitEthernet0/0]ip address 1.1.1.2 24 R2开启FTP服务&#xff0c;创建用…

CentOS 7如何找回用户名和密码

当我们在使用CentOS 7系统时忘记了账号密码怎么办呢&#xff1f; 第一步 进入选择系统界面 选择你的操作系统 然后按e键进入 第二步 进入界面后添加代码并执行 如图所示 在UTF-8后面添加 init/bin/sh这段代码 之后按cltr x 执行进入命令行界面 第三步 如何查看你的用户名和…

用户名密码方式访问 FTP

前言 用户名密码方式访问 FTP。 简介 场景&#xff1a;ftp 和 www web 服务器相结合 公司内部现在有一台 FTP 和 WEB 服务器&#xff0c;FTP 的功能主要用于维护公司的网站内容&#xff0c;包括上传文件、创建目录、更新网页等等。公司现有两个部门负责维护任务&#xff0c…

Windows10系统怎么在电脑上搭建ftp服务器?ftp用户名密码忘了怎么查看?

1.从程序面板中选择:打开或关闭windows功能,勾选下面标红选框点击确定 2.我的电脑,鼠标右击选择【管理】,点击服务和应用程序,intent information services, 3.点击【网站】鼠标右击选择添加FTP站点管理,站点名称自己定义,物理路径自定义,点击下一步 4选择自己的IP

用户自己修改ftp服务器默认密码是什么,ftp服务器 改默认用户名和密码

ftp服务器 改默认用户名和密码 内容精选 换一换 支持2.2.T1、2.2.T2、2.2.T2.SPC100、2.2.T2.SPC200、2.2.T2.SPC300版本升级到2.2.T3版本。支持2.2.T3升级到2.2.1版本。支持2.2.T3、2.2.1升级到2.2.T4版本。支持2.2.T4、2.2.1升级到2.3.T10版本。联网状态下,系统会自动下载鲲…

实验二 简单网络命令和wireshark捕获FTP用户名密码

实验二 简单网络命令和wireshark捕获FTP用户名密码 预备知识 Wireshark&#xff08;前称Ethereal&#xff09;是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包&#xff0c;并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口&#xff0c;直接…

FTP-用户名密码明文传输

一、实验原理 FTP协议用于用户认证的过程中&#xff0c;客户端与服务器是通过明文进行交互信息的。 二、实验环境 目标主机&#xff1a;Win2K3 192.168.20.145 攻击主机&#xff1a;Kali2 192.168.20.133 三、实验过程 在Kali2上开启wireshark软件&#xff0c;抓取FTP数据…