【C#学习11】文件操作

文件系统

在这里插入图片描述

表示文件和文件夹的.NET类

在这里插入图片描述

文件操作

FileInfo和DirectoryInfo类

通过FileInfo和DirectoryInfo类来读取文件和文件夹属性

  • 查看文件属性,创建文件,移动文件,重命名文件
  • 判断路径是否存在,创建目录
  • 对于FileInfo,或者DirectoryInfo进行构造的时候,如果传递了一个不存在的文件或者文件夹路径,这个时候不会出现异常,只有当你使用这个文件或者文件夹的时候才会出现问题。可以通过Exists属性判断这个文件/夹是否存在

属性列表

在这里插入图片描述

方法列表

在这里插入图片描述
实践:

FileInfo类:
在这里插入图片描述

using System.IO; //添加命名空间

namespace _046_查看文件属性FileInfo
{
    class Program
    {
        static void Main(string[] args)
        {
            //1.相对路径:当前程序所在的路径(一般在bin/debug文件夹下)
            //由于testFile.txt是放在工程下的,程序搜索不到我们创建的txt文件
            //所以要把testFile的属性设置为“复制到输出目录”->"如果较新则复制"
            //FileInfo fileInfo = new FileInfo("testFile.txt");

            //2.绝对路径:文件完整的路径名(@不让\x被当成转义字符)
            FileInfo fileInfo = new FileInfo(@"G:\233\Visual Studio\Save\UnityLearning\046_查看文件属性FileInfo\bin\Debug\testFile.txt");

            Console.WriteLine(fileInfo.Exists); //判断文件是否存在
            Console.WriteLine(fileInfo.Name); //文件名+后缀
            Console.WriteLine(fileInfo.Length); //文件大小
            Console.WriteLine(fileInfo.Directory); //文件所在路径(不包含文件名)
            Console.WriteLine(fileInfo.IsReadOnly); //文件是否只读
            fileInfo.CopyTo("testFile2.txt"); //复制一个新文件(若已存在则不做处理)
            //fileInfo.Delete(); //删除输出路径下的文件,工程下的文件不动

            //3.若一开始文件不存在
            FileInfo fileInfo2 = new FileInfo("ttestFile.txt");
            if (fileInfo2.Exists == false) //如果不存在则创建新文件
            {
                fileInfo2.Create();
            }
            fileInfo2.MoveTo("TTestFile.txt"); //重命名

            Console.ReadKey();
        }
    }
}

DirectoryInfo类:

using System.IO; //添加命名空间

namespace _046_查看文件属性FileInfo
{
    class Program
    {
        static void Main(string[] args)
        {
  		    //文件夹操作FirectoryInfo
            //1.按照完整路径名创建
            DirectoryInfo dirInfo = new DirectoryInfo(@"G:\233\Visual Studio\Save\UnityLearning\046_查看文件属性FileInfo\bin\Debug");

            Console.WriteLine(dirInfo.Exists);
            Console.WriteLine(dirInfo.Name);
            Console.WriteLine(dirInfo.Parent); //父目录
            Console.WriteLine(dirInfo.Root); //根目录
            Console.WriteLine(dirInfo.CreationTime); //创建时间
            dirInfo.CreateSubdirectory("China"); //创建子目录

            //2.绝对路径
            DirectoryInfo dirInfo2 = new DirectoryInfo("No1.txt");
            if (dirInfo2.Exists==false)
            {
                dirInfo2.Create();
            }
            Console.ReadKey();
        }
    }
}

File

通过File读写文件

  • 要把文本文件的属性设置“复制到输出目录”->"如果较新则复制"
using System.IO;

namespace _047_使用File读写文件
{
    class Program
    {
        static void Main(string[] args)
        {
            //1.读取文件
            //读取文件里每一行的字符串
            string[] strArray = File.ReadAllLines("TextFile1.txt");
            foreach (var s in strArray)
            {
                //Console.WriteLine(s);
            }
            //读取文件里的文本为一个字符串
            string str = File.ReadAllText("TextFile1.txt");
            //读取图像信息为字节数组
            byte[] byteArray = File.ReadAllBytes("testPic.jpg");
            foreach (var b in byteArray)
            {
                //Console.Write(b);
            }

            //2.写入文件
            //向文件写入字符串(数组) (若文件已存在则覆盖,否则创建新文件)
            File.WriteAllText("TextFile2.txt","JOJO的奇妙冒险");
            File.WriteAllLines("TextFile3.txt", new string[] { "1212", "dd3f", "dfdfdf"} );
            //复制图片
            byte[] data = File.ReadAllBytes("testPic.jpg");
            File.WriteAllBytes("testPic2.jpg", data);

            Console.ReadKey();
        }
    }
}

流适合读取一些大的文件

FileStream-使用流来读写文件

using System.IO;
namespace _048_使用FileStream读写文件
{
    class Program
    {
        static void Main(string[] args)
        {
            //1.创建文件流 用来操作文件(路径,操作文件方式:打开、追加、创建、覆盖等)
            //一般用来读取二进制文件
            FileStream stream = new FileStream("TextFile1.txt",FileMode.Open);

            //2.读取或者写入数据(stream都是read和write)
            byte[] data = new byte[1024]; //数据容器
            while (true)
            {
                //(存放的数据位置,索引,最大长度)
                int length = stream.Read(data, 0, data.Length);
                if (length==0)
                {
                    break;
                }  
                for (int i = 0; i < length; i++)
                {
                    Console.Write(data[i]+" ");
                }
            }
            Console.ReadKey();
        }
    }
}

使用FileStream完成文件的复制

using System.IO;
namespace _048_使用FileStream读写文件
{
    class Program
    {
        static void Main(string[] args)
        {
            FileStream readStream = new FileStream("TestPicture1.jpg",FileMode.Open);
            FileStream writeStream = new FileStream("TestPicture2.jpg",FileMode.Create);

            byte[] data = new byte[1024];
            while (true)
            {
                int length = readStream.Read(data, 0, data.Length);
                if (length == 0)
                {
                    Console.WriteLine("读取结束");
                    break;
                }
                else
                {
                    writeStream.Write(data,0,length); 
                }
            }
            //关闭流
            readStream.Close();
            writeStream.Close();
            Console.ReadKey();
        }
    }
}

使用StreamReader/StreamWriter读写文本文件

我们对文本文件的读写一般使用StreamReader和StreamWriter,因为不用的文本有不同编码格式,这个StreamReader会帮我们自动处理,所以我们不需要关心文本文件的编码是什么

using System.IO;
namespace _049_使用StreamReader和StreamWriter读写文本文件
{
    class Program
    {
        static void Main(string[] args)
        {
            //1.创建文本文件读取流(会检查字节码标记去欸但那个编码格式)
            //可指定的编码格式 ASCII Unicode UTF7 UTF8 UTF32
            StreamReader reader = new StreamReader("TextFile1.txt");

            //2.使用流读取文本文件
            //2.1读取一行字符串
            while (true)
            {
                string str = reader.ReadLine();
                if (str == null) break;
                Console.WriteLine(str);
            }

            //2.2 读取到文本的结尾(读取文本中所有的字符)
            string str = reader.ReadToEnd(); 
            Console.WriteLine(str);

            //2.3 读取一个字符(若空则返回-1)
            while (true)
            {
                int res = reader.Read();
                if (res == -1) break;
                Console.Write((char)res);
            }
            reader.Close(); //关闭流

            //创建文本文件写入流
            //若文件存在则覆盖,反之则创建新文件
            StreamWriter writer = new StreamWriter("TextFile2.txt");
            while (true)
            {
                string str = Console.ReadLine();
                if (str=="q")    break;
                //writer.Write(str); //写入一个字符串
                writer.WriteLine(str); //同上,并换行
            }
            writer.Close();

            Console.ReadKey();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值