• C#中的文件流学习笔记第一篇


       前言:这篇博客我主要说一下C#中文件流的使用规则,也是从最基础上面去说,也相信我们大家只要是干Web行业的这些知识点肯定能用上,其中介绍几个操作文件流的类,Path类,FileStream类,Read和Write方法的使用

    1. 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)使用文件流,无非就是读取和写入文件

                ->读取文件,就必须想办法打开文件,使用构造方法

    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创建文件并且写入信息: 

    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码表,不需要百度了,只要我们程序员有计算机

    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);
    
    }

          

    1. FileStream

        (1) ReadByte() 读取一个字节,返回对应的直接表示数字的十进制形式

        (2)WriteByte() 可以写一个字节

        (3)复制文件,对文件加密,解密

     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");
    
                    }
    
                }
    
     }
    1. Read和Write的使用

    (1) Read(存放数据的byte数组,从数组的第一号位置开始放数据,取出多少数据)

    (2)一般情况使用的时候 Read(数组名,0,数组名.Length);

    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);

                                     }

                              }

                       }

    1. 使用命令行参数控制程序,实现控制台程序的模仿copy

    (1) 首先新建一个控制台应用程序,起名随便,然后写入如下代码:

     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类。

  • 相关阅读:
    java多线程练习题 类
    java练习题在一个文件里面输入内容在另一个文件里面可以查看
    java练习题输入流姓名学号信息
    java 异常处理2
    java 处理异常练习题
    java get银行练习题
    java 练习题 求梯形的面积和周长
    java get正确写类的练习题 猫
    GUID 全局唯一标识符
    oracle 建表 练习2
  • 原文地址:https://www.cnblogs.com/hanyinglong/p/2715865.html
Copyright © 2020-2023  润新知