C#-笔记-类-第四章

2022-06-28 08:37:43 浏览数 (1)

path类

path类专门用來操作路径的

代码语言:javascript复制
            string str = @"C:UsersH0772690source老趙.txt";
            获得文件名
            Console.WriteLine(Path.GetFileName(str));//老趙.txt
            获得文件名但是不包括拓展名
            Console.WriteLine(Path.GetFileNameWithoutExtension(str));//老趙
            获得全路径
            Console.WriteLine(Path.GetFullPath(str));//C:UsersH0772690source老趙.txt
         获得路径但是不包括文件名 
            Console.WriteLine(Path.GetDirectoryName(str));//C:UsersH0772690source
            获得文件拓展名
            Console.WriteLine(Path.GetExtension(str));//.txt
            拼接字符串作为路径
            Console.WriteLine(Path.Combine(@"C:a",@"b.txt")); //C:ab.txt

File类的用法

操作文件

代码语言:javascript复制
			指定路径创建一个指定名称的文件
            File.Create(@"C:UsersH0772690Desktopnew.txt");
            Console.WriteLine("創建成功");
            删除指定的路径下的文件
            File.Delete(@"C:UsersH0772690Desktopnew.txt");
            Console.WriteLine("刪除成功");
            复制指定的路径下的文件,给一个指定的路径以及名称
            File.Copy(@"C:UsersH0772690Desktopnew.txt", @"C:UsersH0772690Desktopnews.txt");
            Console.WriteLine("複製成功");

编码简介: ASC 128 ASCII 256

GB2312 简体字 Big5 繁体字

unicode 解析起来慢

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

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

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

代码语言:javascript复制
            var str = File.ReadAllBytes(@"C:UsersH0772690Desktopnews.txt");
            string s = Encoding.Default.GetString(str);
            Console.WriteLine(s);

但是GB2321,GBK这样写:

代码语言:javascript复制
var str = File.ReadAllBytes(@"C:UsersH0772690Desktopnews.txt");
string s = Encoding.GetEncoding("GBK").GetString(str);
Console.WriteLine(s);

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

代码语言:javascript复制
string[] str = File.ReadAllLines(@"C:UsersH0772690Desktopnew.txt",Encoding.Default);
            foreach (string item in str)
            {
                Console.WriteLine(item);
            }

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

代码语言:javascript复制
string hh = File.ReadAllText(@"C:UsersH0772690Desktopnew.txt", Encoding.Default);
            Console.WriteLine(hh);

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

代码语言:javascript复制
string str = "你好啊幹啥呢?";
byte[] buff = Encoding.Default.GetBytes(str);//必须string转化成byte类型
File.WriteAllBytes(@"C:UsersH0772690Desktopnewnew.txt",buff);

File.WriteAllLines数组类型的写进去

代码语言:javascript复制
File.WriteAllLines(@"C:UsersH0772690Desktopnew.txt",new string[] {"你好啊我是小鸟!!!!!!"});

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

代码语言:javascript复制
File.WriteAllText(@"C:UsersH0772690Desktopnew.txt","哈哈哈哈");

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

文件流FilStream读写文件

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

代码语言:javascript复制
			FileStream fsRead = new FileStream(@"C:UsersH0772690Desktopnews.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);

详解:

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

使用StreamReader和StreamWriter 操作字符

代码语言:javascript复制
using (StreamReader sr=new StreamReader(@"C:UsersH0772690Desktopnews.txt",Encoding.Default))
            {
                while (!sr.EndOfStream)
                {
 //!sr.EndOfStream如果不在输出流结尾就一直输出  Console.WriteLine(sr.ReadLine());
                }
                
            }

StreamWriter

代码语言:javascript复制
            using (StreamWriter sw=new StreamWriter(@"C:UsersH0772690Desktopnewsnew.txt"))
            {
                sw.Write("今天天氣真不錯!!!");
            }
            Console.WriteLine("okok");

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

代码语言:javascript复制
using (FileStream fsRead = new FileStream(@"C:UsersH0772690Desktopnews.txt", FileMode.OpenOrCreate, FileAccess.Write))
            {
                string str = "看看你幹嘛呢";
                byte[] buffer = Encoding.Default.GetBytes(str);
                fsRead.Write(buffer,0,buffer.Length);
            }
            Console.WriteLine("ok");

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

代码语言:javascript复制
        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);
                    }
                }
            }

        }

調用

代码语言:javascript复制
string source = @"C:UsersH0772690Desktop夜曲.flac";
            string target = @"C:UsersH0772690Desktopnew夜曲.flac";
            CopyFile(source,target);
            Console.WriteLine("ok");

0 人点赞