C#-笔记-类-第四章

path类

path类专门用來操作路径的

            string str = @"C:\Users\H0772690\source\老趙.txt";
            获得文件名
            Console.WriteLine(Path.GetFileName(str));//老趙.txt
            获得文件名但是不包括拓展名
            Console.WriteLine(Path.GetFileNameWithoutExtension(str));//老趙
            获得全路径
            Console.WriteLine(Path.GetFullPath(str));//C:\Users\H0772690\source\老趙.txt
         获得路径但是不包括文件名 
            Console.WriteLine(Path.GetDirectoryName(str));//C:\Users\H0772690\source
            获得文件拓展名
            Console.WriteLine(Path.GetExtension(str));//.txt
            拼接字符串作为路径
            Console.WriteLine(Path.Combine(@"C:\a\",@"b.txt")); //C:\a\b.txt

File类的用法

操作文件

			指定路径创建一个指定名称的文件
            File.Create(@"C:\Users\H0772690\Desktop\new.txt");
            Console.WriteLine("創建成功");
            删除指定的路径下的文件
            File.Delete(@"C:\Users\H0772690\Desktop\new.txt");
            Console.WriteLine("刪除成功");
            复制指定的路径下的文件,给一个指定的路径以及名称
            File.Copy(@"C:\Users\H0772690\Desktop\new.txt", @"C:\Users\H0772690\Desktop\news.txt");
            Console.WriteLine("複製成功");

编码简介:
ASC 128
ASCII 256

GB2312 简体字
Big5 繁体字

unicode 解析起来慢

现在用UTF-8 web
编码:将字符串以怎样的形式保存为二进制

乱码:
产生乱码的原因:就是你打开保存这个文件所采用的编码,和你打开这个文件所采用的编码格式不一样。

File读取文件数据变成一个字符串输出
UTF-8 GB2321(简体)GBK(简繁体都有) ASCII Unicode(utf全体集)
Default(获取本机的编码)
一般的是下边的方法:
File.ReadAllBytes

            var str = File.ReadAllBytes(@"C:\Users\H0772690\Desktop\news.txt");
            string s = Encoding.Default.GetString(str);
            Console.WriteLine(s);

但是GB2321,GBK这样写:

var str = File.ReadAllBytes(@"C:\Users\H0772690\Desktop\news.txt");
string s = Encoding.GetEncoding("GBK").GetString(str);
Console.WriteLine(s);

File.ReadAllLines用法,返回的是一个数组

string[] str = File.ReadAllLines(@"C:\Users\H0772690\Desktop\new.txt",Encoding.Default);
            foreach (string item in str)
            {
                Console.WriteLine(item);
            }

File.ReadAllText用法,返回的是一个字符串

string hh = File.ReadAllText(@"C:\Users\H0772690\Desktop\new.txt", Encoding.Default);
            Console.WriteLine(hh);

总结:ReadAllLines和File.ReadAllText都能用于对文本文档的读取,只是看看需要到哪个返回的类型,需要对内容进行修改就得用ReadAllLines,如果说对视频音频的读取只能用File.ReadAllBytes
File写文件数据

string str = "你好啊幹啥呢?";
byte[] buff = Encoding.Default.GetBytes(str);//必须string转化成byte类型
File.WriteAllBytes(@"C:\Users\H0772690\Desktop\newnew.txt",buff);

File.WriteAllLines数组类型的写进去

File.WriteAllLines(@"C:\Users\H0772690\Desktop\new.txt",new string[] {"你好啊我是小鸟!!!!!!"});

File.WriteAllText写进去就会把原来的覆盖了

File.WriteAllText(@"C:\Users\H0772690\Desktop\new.txt","哈哈哈哈");

File只能读写小文件因为他读写都是一次性完成所有导致他不能读写大文件。所以读写大文件只能用到文件流

文件流FilStream读写文件

FilStream 操作字节文件
StreamReader和StreamWriter 操作字符

			FileStream fsRead = new FileStream(@"C:\Users\H0772690\Desktop\news.txt",FileMode.OpenOrCreate,FileAccess.Read);
            byte[] buffer = new byte[1024*1024*5];
            //返回本次实际读取到的字节
            int r = fsRead.Read(buffer,0,buffer.Length);
            //将字节数组中的每一个元素按照指定的编码格式解码成字符串
            string s = Encoding.Default.GetString(buffer,0,r);
            //关闭流,文件流就是少数不能被GC(垃圾回收机制)回收的资源
            fsRead.Close();
            //释放流所占用的资源
            fsRead.Dispose();
            Console.WriteLine(s);

详解:

FileStream fsRead = new FileStream(@"C:\Users\H0772690\Desktop\news.txt",FileMode.OpenOrCreate,FileAccess.Read);
有三个参数,1.是文件路径2.是指定系统打开文件这个是打开没有就创建,3.对于文件怎么操作读写
Encoding.Default.GetString(buffer,0,r);
解码三个参数,1.解码的目标2.0开始3.实际长度

使用StreamReader和StreamWriter 操作字符

using (StreamReader sr=new StreamReader(@"C:\Users\H0772690\Desktop\news.txt",Encoding.Default))
            {
                while (!sr.EndOfStream)
                {
 //!sr.EndOfStream如果不在输出流结尾就一直输出  Console.WriteLine(sr.ReadLine());
                }
                
            }

StreamWriter

            using (StreamWriter sw=new StreamWriter(@"C:\Users\H0772690\Desktop\newsnew.txt"))
            {
                sw.Write("今天天氣真不錯!!!");
            }
            Console.WriteLine("okok");

注意:写入的时候会覆盖原来的,在参数增加一个ture就是追加数据就不是覆盖了
将创建文件流对象的过程写在using当中,会自动帮助我们释放流所占的资源。
从前到后覆盖了旧的数据,和读的道理一样,只是写到using里不用自己手动释放

using (FileStream fsRead = new FileStream(@"C:\Users\H0772690\Desktop\news.txt", FileMode.OpenOrCreate, FileAccess.Write))
            {
                string str = "看看你幹嘛呢";
                byte[] buffer = Encoding.Default.GetBytes(str);
                fsRead.Write(buffer,0,buffer.Length);
            }
            Console.WriteLine("ok");

使用FileStream实现多媒体文件的复制
写一个方法在主方法里调用

        public static void CopyFile(string source,string target) {
            //我们创建一个负责读取的流
            using (FileStream fsRead =new FileStream(source,FileMode.OpenOrCreate,FileAccess.Read))
            {
                //我们创建一个负责写入的流
                using (FileStream fsWrite =new FileStream(target,FileMode.OpenOrCreate,FileAccess.Write))
                {
                    byte[] buffer = new byte[1024*1024*5];//5M
                    //因为文件可能比较大,所以我们在读取的时候需要一个循环去读
                    while (true)
                    {
                        //返回本次读取实际读取到的字节数
                        int r = fsRead.Read(buffer,0,buffer.Length);
                        //如果返回一个0,也就意味什么都没取到
                        if (r == 0)
                        {
                            break;
                        }
                        fsWrite.Write(buffer,0,r);
                    }
                }
            }

        }

調用

string source = @"C:\Users\H0772690\Desktop\夜曲.flac";
            string target = @"C:\Users\H0772690\Desktop\new夜曲.flac";
            CopyFile(source,target);
            Console.WriteLine("ok");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蔚说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值