c#-IO学习

Path

练习

//程序主要的任务是进行数据的处理,那么处理好的数据被存储在内存当中,内存中的数据会随着程序运行的结果
            //而消失,如果需要将处理好的数据进行永久的保存,那么就需要使用io流技术将处理好的数据存储到文件夹中,
            //但是文件又是按照路径的方式存储在磁盘上,因此我们应该先学习路径的操作
            //Path:该类就是c#程序员提供的一个用于操作路径地静态类
            string path = "D:/vs存储/io技术/io技术/Program.cs";
            //原理
            int index = path.LastIndexOf("/");
            string filename=path.Substring(index + 1);
            Console.WriteLine(filename);
            //使用Path类获取路径中文件名的获取
            //获取路径中的文件名
            Console.WriteLine(Path.GetFileName(path));
            //获取路径中的文件名:不带扩展
            Console.WriteLine(Path.GetFileNameWithoutExtension(path));
            //获取扩展名
            Console.WriteLine(Path.GetExtension(path));
            //获取路径的分隔符
            Console.WriteLine(Path.DirectorySeparatorChar);
            //获取目录名
            Console.WriteLine(Path.GetDirectoryName(path));
            //获取相对路径:./当前路径,../上一层路径
            Console.WriteLine(Path.GetFullPath("./"));
            Console.WriteLine(Path.GetFullPath("../"));
            Console.ReadKey();

File

练习

#region  //File
            //该类用于描述系统中具体的文件,是一个静态类,提供了很多操作文件的方法
            //方法:Exists()判断指定的文件是否存在,Create()创建文件,
            //Delete()删除文件
            //Copy()文件拷贝
            //Move()文件剪切
            //当操作文件的拷贝和剪切的时候一定要是使用Dispose()方法先释放系统的文件资源
            if (File.Exists("./Text.txt"))
            {
                Console.WriteLine("文件存在哦");
                //删除文件
                File.Delete("./Text.txt");
                Console.WriteLine("文件删除成功");
                //创建文件
                File.Create("./Text.txt").Dispose();
                Console.WriteLine("文件创键成功哦");
            }
            else
            {
                Console.WriteLine("文件不存在哦");
                //创建文件
                File.Create("./Text.txt").Dispose();
                Console.WriteLine("文件创键成功哦");
            }
            //进行文件拷贝
            File.Copy("./Text.txt", "D:/.idea/Text.txt");
            Console.ReadKey();
            #endregion

FileInfo 

练习

 #region   //FileInfo
            //定义:FileInfo是一个c#提供的用于操作系统文件的类,该类是一个非静态类,使用的时候需要创建
            //对象进行使用,类似于File静态类
            //区分:什么时候用File,什么时候用FileInfo
            //如果是对一个文件进行多次操作建议使用FileInfo
            //如果是对多个文件进行单一操作建议使用File
            //File静态类每次调用静态方法操作文件的时候,都需要占用cpu的时间进行文件的安全检查处理,比较耗时
            //FileInfo是每次创建类对象的时候才进行安全检查,因此适合对一个文件进行多次操作
            FileInfo fileInfo = new FileInfo("./Text.txt");
            if (fileInfo.Exists)
            {
                //存在
                fileInfo.Delete();
                Console.WriteLine("文件删除成功");
                //创建
                fileInfo.Create().Dispose();
                Console.WriteLine("文件创建成功");
            }
            else
            {
                //不存在
                fileInfo.Create().Dispose();
                Console.WriteLine("文件创建成功");
            }
            //拷贝
            // fileInfo.CopyTo("D:/vs存储/Text.txt");
            //移动
            fileInfo.MoveTo("D:/vs存储/Text.txt");
            Console.ReadKey();
            #endregion

Directory

练习

  #region    //Directory
            //定义:该类是c#提供的用于操作文件系统中文件夹或目录的静态类,提供了操作文件夹的相关静态函数
            //Exists():判断文件夹是否存在
            //Delete()删除指定文件夹
            //CreateDirectory()创建指定文件夹
            //Move()剪切文件夹
            //GetDirectories():获取文件夹下的子文件夹
            //GetFiles()获取文件夹下的文件
            //GetFileSystemEntries()获取文件夹下的所有子文件夹和文件
            if (Directory.Exists("./Text"))
            {
                //有文件夹?
                //删除文件夹
                Directory.Delete("./Text");
                Console.WriteLine("文件夹删除成功");
                //创建文件夹
                Directory.CreateDirectory("./Text");
                Console.WriteLine("文件夹创建成功");
            }
            else
            {
                //没有文件夹?
                //创建文件夹
                Directory.CreateDirectory("./Text");
                Console.WriteLine("文件夹创建成功");
            }
            //文件夹剪切
            //Directory.Move("./Text", "D:/t/photo/Text");
            //Console.WriteLine("文件夹剪切成功");
            //获取指定文件夹下面的子文件夹或文件
            Console.WriteLine(Path.GetFullPath("../../"));
            string[] dircs = Directory.GetDirectories("../../");
            foreach(var item in dircs)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("--------");
            //获取指定文件夹下的文件
            string[] files = Directory.GetFiles("../../");
            foreach(var item in files)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("-----");
            //获取指定文件夹下的子文件和文件
            string[] entries = Directory.GetFileSystemEntries("../../");
            foreach(var item in entries)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
            #endregion

DirectoryInfo

练习

  #region   //DirectoryInfo
            //c#提供用于操作文件夹的实例类,使用的时候需要创建该类的对象,功能类似于Directory静态类
            DirectoryInfo directoryInfo = new DirectoryInfo("./Text");
            if (directoryInfo.Exists)
            {
                //有这个文件夹
                directoryInfo.Delete();
                Console.WriteLine("文件删除成功");
                directoryInfo.Create();
                Console.WriteLine("文件夹创建成功");
            }
            else
            {
                //没有这个文件夹
                directoryInfo.Create();
                Console.WriteLine("文件夹创建成功");
            }
            移动文件夹
            //directoryInfo.MoveTo("D:/t/photo/Text");
            //Console.WriteLine("文件夹移动over");

            //获取指定文件夹下面的子文件夹
            directoryInfo = new DirectoryInfo("../../");
            DirectoryInfo[] directoryInfos = directoryInfo.GetDirectories();
            foreach(var item in directoryInfos)
            {
                Console.WriteLine(item.Name);
                Console.WriteLine(item.FullName);
            }
            Console.WriteLine("------------");
            //获取指定文件夹下面的文件
            FileInfo[] fileInfos = directoryInfo.GetFiles();
            foreach(var item in fileInfos)
            {
                Console.WriteLine(item.Name);
            }
            Console.WriteLine("-------------");
            //获取指定文件夹下面的子文件夹和文件
            FileSystemInfo[] fileSystemInfos = directoryInfo.GetFileSystemInfos();
            foreach(var item in fileSystemInfos)
            {
                Console.WriteLine(item.Name);
            }
            Console.ReadKey();
            #endregion

文件读写

练习

 #region   //文件读写
            //创建文件
            if (File.Exists("./Text.txt"))
            {
                File.Delete("./Text.txt");
                File.Create("./Text.txt").Dispose();
            }
            else
            {
                File.Create("./Text.txt").Dispose();
            }
            //WriteReadLines();
            // WriteReadText();
            File.WriteAllBytes("./Text.txt", Encoding.UTF8.GetBytes("第一张\n第二章\n第三章"));
            Console.WriteLine("数据写入完毕");
            byte[] bytes = File.ReadAllBytes("./Text.txt");
            //解码
            string content=Encoding.UTF8.GetString(bytes);
            Console.WriteLine(content);
            Console.WriteLine("文件读写完毕");
            Console.ReadKey();
            #endregion
        }

        private static void WriteReadText()
        {
            File.WriteAllText("./Text.txt", "c#nice,\n c#good");
            Console.WriteLine("数据写输入完毕");
            string content = File.ReadAllText("./Text.txt");
            Console.WriteLine(content);
            Console.WriteLine("数据读取完毕");
        }

        private static void WriteReadLines()
        {
            //写入数据
            File.WriteAllLines("./Text.txt", new string[] { "第一行", "第二行", "第三行" });
            Console.WriteLine("写入数据over");
            //读取数据
            string[] contents = File.ReadAllLines("./Text.txt");
            foreach (var item in contents)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine("数据读取完毕");
        }

FileStream

练习

#region  //FileStream
            //定义:该类是c#提供的主要用于进行文件读写的字节流,和File静态类相比该类可以操作大型数据文件
            string sourse = "./Text.txt";
            string target = "D:/t/photo/Text.txt";
            FileStream reader = new FileStream(sourse, FileMode.Open, FileAccess.Read);
            FileStream writer = new FileStream(target, FileMode.Create, FileAccess.Write);
            byte[] bs = new byte[1024];
            int len = 0;
            do
            {
                //读
                len = reader.Read(bs, 0, bs.Length);
                //写
                writer.Write(bs, 0, len);
            } while (len > 0);
            //关闭
            reader.Close();
            writer.Close();
            //释放资源
            reader.Dispose();
            writer.Dispose();
            Console.ReadKey();
            #endregion

StreamReader和StreaWriter

练习

 //StreamReader和StreamWriter这两个类是c#提供的字符流类,底层采用字符数组的方式进行
            //文件的读写操作,因此只能用于操作文本文件
            string sourse = "D:/vs存储/io技术学习/io技术学习/Program.cs";
            string target = "D:/src/Program.cs";
            using(StreamReader reader=new StreamReader(sourse, Encoding.UTF8))
            {
                using(StreamWriter writer=new StreamWriter(target, false, Encoding.UTF8))
                {
                    string line = null;
                    //循环
                    do
                    {
                        //读
                        line = reader.ReadLine();
                        //写
                        writer.WriteLine(line);
                    } while (!reader.EndOfStream);
                }
            }
            Console.WriteLine("文件读写完毕");
            Console.ReadKey();

序列化和反序列化

练习

 //使用系统特征进行类的标注,标注后使得该类可以进行序列化操作
    [Serializable]
    class Player
    {
        //字段
        private string name;
        private int age;
        private int hp;
        //标注该字段不会被序列化到文件去
        [NonSerialized]
        private string desc = "玩家";
        //构造函数
        public Player(string name, int age, int hp)
        {
            this.name = name;
            this.age = age;
            this.hp = hp;
        }
        //属性
        public string Name { get => name; set => name = value; }
        public int Age { get => age; set => age = value; }
        public int Hp { get => hp; set => hp = value; }
        public string Desc { get => desc; set => desc = value; }
        //重写
        public override string ToString()
        {
            return $"[name={this.name}-age={this.age}-hp={this.hp}-dec={this.desc}";
        }
    }
   //序列化:类对象>文件
            //反序列化:文件>类对象
            //创建类对象
            Player player = new Player("哈哈",20,100);
            //文件操作
            using(FileStream fs=new FileStream("./player.binary", FileMode.OpenOrCreate, FileAccess.Write))
            {
                BinaryFormatter binaryFormatter = new BinaryFormatter();
                //序列化
                binaryFormatter.Serialize(fs, player);
                //结束
                Console.WriteLine("序列化over");
            }
            //反序列化
            using(FileStream fs=new FileStream("./player.binary", FileMode.Open, FileAccess.Read))
            {
                //反序列化
                BinaryFormatter binaryFormatter = new BinaryFormatter();
                Player obj = binaryFormatter.Deserialize(fs) as Player;
                //输出
                Console.WriteLine(obj);
                Console.WriteLine("反序列化over");
            }
            Console.ReadKey();

你可能感兴趣的:(c#,c#,学习,开发语言,.net,服务器)