C#中的文件流学习笔记第一篇
前言:这篇博客我主要说一下C#中文件流的使用规则,也是从最基础上面去说,也相信我们大家只要是干Web行业的这些知识点肯定能用上,其中介绍几个操作文件流的类,Path类,FileStream类,Read和Write方法的使用
- Path
(1) 文件路径有什么特征?
1)[根目录:\]文件夹\文件名.后缀名
(2)合并路径 Combine
string p4 = Path.Combine(@"c:\123a\abc\", "白天不懂夜的黑.mp3");
string p5 = Path.Combine(@"c:\123a\abc", "白天不懂夜的黑.mp3");
(3)获得文件夹的路径 GetDirectoryName
string p2 = Path.GetDirectoryName(path);
(4)得到全路径 GetFullPath
string full = Path.GetFullPath("1.txt");
(5)得到后缀名 GetExtension
string p3 = Path.GetExtension(path);
(6)得到文件名 GetFileName
string p6 = Path.GetFileName(path);
(7)更改文件后缀名 ChangeExtension
string path = @"c:\HYL\CS\File\Exise.avi";
string p1= Path.ChangeExtension(path, "rmvb");
(8)返回临时文件夹 GetTempPath
string s= Path.GetTempPath();
2. FileStream(文件流),专门将文件以字节流的形式进行处理
(1)父类Stream(流)
(2)使用文件流,无非就是读取和写入文件
->读取文件,就必须想办法打开文件,使用构造方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | static void Main( string [] args) { using (FileStream fileRead = new FileStream( @"F:\heima\practice\总复习\文件流的读取\bin\Debug\SqlHelper.txt" , FileMode.Open, FileAccess.Read)) { int num; while ((num = fileRead.ReadByte()) != -1) { Console.Write(( char )num); } Console.ReadKey(); } } |
(3)使用Writer创建文件并且写入信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | static void Main( string [] args) { using (FileStream fileWriter = new FileStream( "file.txt" , FileMode.Create, FileAccess.Write)) { Console.WriteLine( "请输入信息" ); string str = Console.ReadLine(); byte [] bs = Encoding.Default.GetBytes(str); for ( int i = 0; i < bs.Length; i++) { fileWriter.WriteByte(bs[i]); } } } |
(4)自己手动书写一个ACSII码表,不需要百度了,只要我们程序员有计算机
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | static void Main( string [] args) { List< string > list = new List< string >(); list.Add( "<body>" ); for ( int i = 0; i < 128; i++) { list.Add( string .Format( "子符 <font size=\"7\" color=\"red\">{0}</font> 的ASCII码为 <font size=\"7\" color=\"red\">{1}</font> <br/>" , ( char )i, i)); } list.Add( "</body>" ); File.WriteAllLines( "ASCII.html" , list.ToArray(), Encoding.Default); } |
- FileStream
(1) ReadByte() 读取一个字节,返回对应的直接表示数字的十进制形式
(2)WriteByte() 可以写一个字节
(3)复制文件,对文件加密,解密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | static void Main( string [] args) { //对文件进行一个简单加密 using (FileStream fileRead = new FileStream( "梦想的力量.mp3" , FileMode.Open, FileAccess.Read)) { using (FileStream fileWrite = new FileStream( "梦想.mp3" , FileMode.Create, FileAccess.Write)) { int num = -1; while ((num = fileRead.ReadByte()) != -1) { num++; fileWrite.WriteByte(( byte )num); } Console.WriteLine( "OK" ); } } //对上面加密的文件进行解密 using (FileStream fileRead = new FileStream( "梦想.mp3" , FileMode.Open, FileAccess.Read)) { using (FileStream fileWrite = new FileStream( "梦想_解密.mp3" , FileMode.Create, FileAccess.Write)) { int num = -1; while ((num = fileRead.ReadByte()) != -1) { num--; fileWrite.WriteByte(( byte )num); } Console.WriteLine( "OK" ); } } } |
- Read和Write的使用
(1) Read(存放数据的byte数组,从数组的第一号位置开始放数据,取出多少数据)
(2)一般情况使用的时候 Read(数组名,0,数组名.Length);
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | static void Main( string [] args) { //读取文件流 byte [] bs= new byte [10]; using (FileStream fileRead = new FileStream( "file.txt" , FileMode.Open, FileAccess.Read)) { //Read(存放数据的byte数组,从数组的第一号位置开始放数据,取出多少数据) //一般情况使用的时候 Read(数组名,0,数组名.Length); int count = 0; while ((count = fileRead.Read(bs, 0, bs.Length))>0) { for ( int i = 0; i < count; i++) { Console.WriteLine(( char )bs[i]); } } } //写流 using (FileStream fileWrite= new FileStream( "file.txt" ,FileMode.Create,FileAccess.Write)) { byte [] bs = { 0, 97, 98, 99, 48, 49 }; fileWrite.Write(bs, 1, bs.Length - 1); } } |
(3)使用Write和Read复制文件
1)语法实现
using(fileRead)
{
using(fileWrite)
{
byte[] bs=new byte[10*1024*1024];
int count=0;
while((count=fileRead.Read(bs,0,bs.Length))>0)
{
fileWrite.Write(bs,0,count);
}
}
}
- 使用命令行参数控制程序,实现控制台程序的模仿copy
(1) 首先新建一个控制台应用程序,起名随便,然后写入如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | static void Main( string [] args) { //保证给的参数只有两个 if (args.Length != 2) { Console.WriteLine( "命令语法不正确" ); return ; } //得到文件的路径 string file1 = args[0]; string file2 = args[1]; //判断第一个文件是否存在 try { using (FileStream fileRead = new FileStream(file1, FileMode.Open, FileAccess.Read)) { using (FileStream fileWrite = new FileStream(file2, FileMode.Create, FileAccess.Write)) { byte [] bs = new byte [10 * 1024]; int count = 0; while ((count = fileRead.Read(bs, 0, bs.Length)) > 0) { fileWrite.Write(bs, 0, count); } Console.WriteLine( "以复制\t\t1个文件" ); } } } catch { Console.WriteLine( "系统找不到指定文件" ); } } |
(2)然后运行程序,找到Debug文件夹下面的exe文件,复制一个备份,起名为hylcopy.exe
(3)将这个文件复制到C:\Windows这个目录下面,然后启动cmd命令
(4)输入的信息如图所示:
下篇博客再说一下一些其他的流文件,读写流StreamReader和StreamWriter方法,还有File类和Directory类。
初心商城:初心商城
作者:韩迎龙(Kencery) MVC/.NET群:159227188如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏一杯咖啡,本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构