一道练习题引申出来的知识点(一) 文件以及文件流的操作

本文介绍了使用C#进行文件操作及文件流处理的基本方法,包括读取、写入、复制等常见操作,并详细展示了不同场景下的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前几天做了一道感觉有点技术含量的练习题(高手看到不要喷哦 小弟是菜鸟中的菜鸟 所有小弟认为有点技术含量)
大概题目是这样的:
有3个txt文档 分别是三篇分章 第一篇是我国百家姓的介绍 第二篇是一百个好听的女孩的名字 第三篇是一百个好听的男孩的名字(名字都是两个字的)
在百家姓中随机生成一个姓氏firstName  在一百个好听的男孩的名字中随机生成一个名字boyName 女孩如此 girlsName
再随机生成一个性别gender 男或者女(现在至少在我们国家官方承认的只用这两种性别 哈哈)
如果随机生成的gender是“男” 那么只能随机生成boyName 如果gender是"女" 同理只能生成girlsName
最后再从1~100中随机生成一个年龄age
例如:王小二    男    21    分别对应着  firstName+boyName     gender      age   
生成后 插入到数据库中(我原来做的是生成sql脚本文件 所以以下给出的源码是生成sql脚本文件的源码) 

在这道题中 我大概使用到了以下技术点:
1.文件的读写操作
2.正则表达式匹配字符串
3.泛型集合的使用
4.随机函数
5.字符串处理函数
6.sql语句
7.ado.net

在之后的几篇文章中我会依依为大家介绍这些 介绍的方式全部是我的课堂笔记 有不对的地方 还希望大牛拍砖

这篇介绍的是“文件以及文件流的操作” 好了 废话不多少 开始!!!!


 

1.读取文件中所有行 放在数组中 ↑
string[] strs = System.IO.File.ReadAllLines(@"D:\115账号.txt", Encoding.Default);


2. 读取文件中所有行 放在字符串中 ↑
string str=System.IO.File.ReadAllText(@"D:\115账号.txt", Encoding.Default);


3. 文件的复制 ↑
System.IO.File.Copy(@"D:\115账号.txt", @"D:\1.txt",true);//将原来的文件覆盖掉
System.IO.File.Copy(@"D:\115账号.txt", @"D:\1.txt",false);//不能和已经存在的文件重名


4. 文件的创建 ↑
System.IO.File.Create(@"D:\10.txt");


5. 文件的删除 ↑
System.IO.File.Delete(@"D:\10.txt");


6. 判断文件是否存在 ↑
if (System.IO.File.Exists(@"D:\100.txt")==true)
{
    Console.WriteLine("这个文件存在");
}
else
{
     Console.WriteLine("不存在");
}


7. 文件的拷贝 / 复制 ↑
System.IO.File.Copy(@"D:\100.txt", @"E:\2.txt");//(旧路径,新路径)


8. 文件的移动 / 剪贴 ↑
System.IO.File.Move(@"D:\10.txt", @"E:\200.txt");//(旧路径,新路径)


9. 文件的写入 / 同时创建文件 并且覆盖掉以前的内容 ↑ 
string str = "你好 哈哈!!!";            System.IO.File.WriteAllText(@"D:\100.ppt", str,Encoding.Default);


10. 文件的追加 ↑
string str = "你好 哈哈!!!";          System.IO.File.AppendAllText(@"D:\100.txt", str,Encoding.Default);

11. 新建一个文件夹 ↑
System.IO.Directory.CreateDirectory(@"D:\新建文件夹");


12. 显示出文件夹中的所有内容(只显示文件名字 不显示文件夹名字)↑
string [] strs=System.IO.Directory.GetFiles(@"D:\如鹏","*.txt");
 

13. 显示出 文件夹 和 文件 的名字中的所有内容 ↑
string[] strs = System.IO.Directory.GetFileSystemEntries(@"D:\如鹏");


14. 检测本地磁盘的盘符名称以及盘符个数 ↑
string[] strs = System.IO.Directory.GetLogicalDrives();//strs中存放的是盘符的名称 strs的长度就是盘符的个数
 
15. 删除文件夹和里面的内容 ↑
System.IO.Directory.Delete(@"D:\1",true);

16.获得当前执行程序的路径 ↑
string str=Assembly.GetExecutingAssembly().Location;
string str1 = Directory.GetCurrentDirectory();

 

 

什么是文件流操作
文件流就在文件传输时 传输的是文件的二进制数据 就是01代码 文件流可以控制每次读取文件二进制数据的宽度 这个宽度 就是我们所说的缓存

使用文件流时 需要添加命名空间
using System.IO;

创建一个读的文件流 ↑
StreamReader reader = new StreamReader(file_read,Encoding.Default);
// 创建一个读文件的流

创建一个写的文件流 ↑
StreamWriter writer = new StreamWriter(file_write, Encoding.Default);
// 创建一个写文件的流

创建一个读文本文件的流(读出带汉字的文件) ↑
FileStream file_read = new FileStream(path, FileMode.Open, FileAccess.Read);
// 创建一个读取文本文件的流

创建一个写文本文件的流(能将汉字写去文件中) ↑
FileStream file_write = new FileStream(path, FileMode.Create, FileAccess.Write);
//创建一个写文本文件的流

如何使用文本文件流(File.ReadAllText和File.WrteAllText的原理就是利用了文本文件的流操作) ↑
FileStream file_Read = new FileStream(@"C:\Users\宋方舟\Desktop\linq.txt", FileMode.Open, FileAccess.Read);
            FileStream file_Write = new FileStream(@"C:\Users\宋方舟\Desktop\哈哈.txt", FileMode.Create, FileAccess.Write);
            using (file_Read)
            {
                int count = 0;
                byte[] MyByte = new byte[200];

                using (file_Write)
                {
                    while ((count = file_Read.Read(MyByte, 0, MyByte.Length)) != 0)
                    {
                        file_Write.Write(MyByte, 0, count);
                    }
                }
            }

将文件复制到指定路径(使用单个字节的方式依次传输) ↑
// 使用前必须创建文件的所有对象
using (file_write)
{
    using (file_read)
    {
         int res = 0; // 存放 返回 int型字符的unicoad码
         while ((res = file_read.ReadByte()) >= 0) //  读文件 返回 int型字符的unicoad码
         {

              file_write.WriteByte((byte)res); // 将文件写入文件中
          }
     }
}

将文件复制到指定路径(使用读取数据块的形式) ↑
// 使用前必须创建所有流操作对象
using (file_read)
{
     using (file_write)
     {
          int count = 0; // 一次读取的字节数
          byte[] myByte=new byte[10]; // 一次读的数据

          while ((count = file_read.Read(myByte, 0, myByte.Length)) > 0) // 记录一次读出来的个数 如果为0 则说明文件已经读完了                      // file_read.Read(缓冲区,从第几个位置开始读取,一次读取的长度)
          {
                file_write.Write(myByte, 0, count); // 将数据块写入硬盘
           }
       }
 }


从一个文本文件中读到数据 再将数据写到一个新的文件中(带有汉字的文件) ↑
// 在操作前 必去创建所有的流对象
    string str = "";
    using (file_read) // 使用完自动释放file_read
    {
         using (file_write) // 使用完自动释放file_write
         {
              using (reader) // 使用完自动释放reader
              {
                   using (writer) // 使用完自动释放write
                   {
                        str = reader.ReadToEnd(); // 将文本文件读都str中
                        writer.Write(str); // 将str中的内容写到指定文件中
                   }
               }
          }
     }

关于using{} ↑
在进行流操作的时候 使用
using
{
 //
}
将操作括起来
这条语句就相当于自动释放了非托管成员,花括号结束的时候自动组调用Dispose();方法
就等于在末尾加上了
流操作对象.Close();
流操作对象.Dispose();

其他类使用using
 其他类如果使用using 必须实现IDisposable接口

 

下一篇文章我会介绍 正则表达式匹配字符串 

 

(作者注释:由于我的笔记是.doc格式的 所有的标题都有超链接以及标题颜色 如果直接复制过来的话会有格式不支持的情况 为了统一 我在全部转换成了txt  所以会没有颜色 希望大家见谅)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值