C#文件操作

目录

前言

一、文件与文件夹

二、读写文件

1.读取文件

2.写入文件

三、Path类

四、io流详解



前言

在日常开发中,文件操作是必不可少的,接下来如我们了解下c#的各种方法来读写文件和操作。


使用前导入命名空间using System.IO;

一、文件与文件夹

FileInfo、DirectoryInfo常用操作

//FileInfo DirectoryInfo
FileInfo fileInfo = new FileInfo(@"E:\programData\c#\ConsoleTest\文件操作\text.txt");
            //复制
fileInfo.CopyTo(@"E:\programData\c#\ConsoleTest\文件操作\text1.txt");//赋值上面文件,命名为text1
//静态复制,需要复制的文件,复制后的文件
File.Copy(@"E:\programData\c#\ConsoleTest\文件操作\text.txt", @"E:\programData\c#\ConsoleTest\文件操作\text3.txt");

//文件夹 路径
DirectoryInfo directoryInfo = new DirectoryInfo(@"E:\programData\c#\ConsoleTest\文件操作\");

            
directoryInfo.Delete();//删除文件夹
DirectoryInfo parent = directoryInfo.Parent;//上级文件夹

if (!directoryInfo.Exists)//判断文件夹是否存在
directoryInfo.Create();//创建文件夹,不存在就可以

Console.WriteLine(directoryInfo.Root.FullName);//输出E:/  获取根目录的名称

@符,默认转为字符串处理 

二、读写文件

1.读取文件

string txt=File.ReadAllText("text.txt",System.Text.Encoding.ASCII);//读取全部内容,编码格式
Console.WriteLine(txt);

//一行一行读取的,返回一个字符串数组,每行代表一个字符串
string[] strArr=File.ReadAllLines("text.txt");
foreach(string s in strArr)
{
   Console.WriteLine(s);
}

//返回一个字节数组,一般用来处理一些非文本文件的
byte[] bArr=File.ReadAllBytes("text.txt");
//不管是什么文件,他低层存储都是用0101这个二进制储存,一个字节对应8位01010110

2.写入文件


//路径,写入内容
File.WriteAllText("text.txt", "aizhaiyu.com");//该写入方式会覆盖掉原本内容

//按行写入,把字符串数组输入
File.WriteAllLines("text.txt", new string[] { "111", "222" });//该写入方式会覆盖掉原本内容

三、Path类

Path.Combine连接路径,不用关心在哪个系统上,因为win系统上的路径是\,而unix是/

//Path类
Console.WriteLine(Path.Combine(@"E:", "programData", "c#", "ConsoleTest", "文件操作", "text.txt"));

四、io流详解

当我们下载或合并文件的时候,必须使用到

1.读取写入FileStream

        public void io(string path)
        {
            //获取开始时间
            DateTime before =DateTime.Now;

            //flieMode.Append文件追加
            //创建流 路径,flieMode打开方式,FileAccess访问权限
            FileStream readfs = new FileStream(path, FileMode.Open, FileAccess.Read);// 读取
            //readfs.ReadByte();//一个一个字节读取,到末尾返回-1

            //写入流,文件路径
            FileStream writefs = new FileStream(path, FileMode.Create, FileAccess.Write);//写入
            //writefs.WriteByte(); //一个一个字节写

            //边读边写
            int nextByte = -1;//读取到下一个字节
            while((nextByte = readfs.ReadByte()) != -1)//有内容时
            {
                writefs.WriteByte((byte)nextByte);
            }
            //后开先关
            writefs.Close();
            //先开的后关
            readfs.Close();

            //获取结束时间
            DateTime after = DateTime.Now;

            //Subtracts时间删减
            TimeSpan ts= after.Subtract(before);
            Console.WriteLine(ts.TotalMilliseconds);//总秒数

        }

明显当前水管一个一个字节读太慢了

优化

        public void io(string path)
        {
            //获取开始时间
            DateTime before =DateTime.Now;

            //flieMode.Append追加
            //创建流 路径,flieMode打开方式,FileAccess访问权限
            FileStream readfs = new FileStream(path, FileMode.Open, FileAccess.Read);// 读取
            //readfs.ReadByte();//一个一个字节读取,到末尾返回-1

            //写入流,文件路径
            FileStream writefs = new FileStream(path, FileMode.Create, FileAccess.Write);//写入
            //writefs.WriteByte(); //一个一个字节写

            //边读边写
            //int nextByte = -1;//读取到下一个字节
            //while((nextByte = readfs.ReadByte()) != -1)//有内容时
            //{
            //    writefs.WriteByte((byte)nextByte);
            //}


            //优化
            byte[] buffer = new byte[1024];//缓存
            int count = -1;//每次读到了多少个字节

            while ((count=readfs.Read(buffer,0,1024))!= 0)
            {
                writefs.Write(buffer, 0, count);
            }

            //ReadByte()只可以读取一个字节,Read可以读取很多个字节
            //第一个把读取到的字节放到数组buffer里面,第二个是放到数组的哪个位置,第三是读取多少个字节
            //int count=readfs.Read(buffer, 0, buffer.Length);//返回实际读取了多少个字节,Read之前没有读取到是返回-1,现在是返回读取到的字节,没有就0

            //第一个 把buffer这个数组的数据进行写入,0是从索引为0开始取数据,count取多少个数据
            //writefs.Write(buffer, 0, count);




            //后开先关
            writefs.Close();
            //先开的后关
            readfs.Close();

            //获取结束时间
            DateTime after = DateTime.Now;

            //Subtracts时间删减
            TimeSpan ts= after.Subtract(before);
            Console.WriteLine(ts.TotalMilliseconds);//总秒数

        }

你可能感兴趣的:(c#学习笔记,c#,学习,.net)