随风_C#_I/O 类(文件操作_文件读写)

  1. System.IO 命名空间有各种不同的类,用于执行各种文件操作,如创建和删除文件、读取或写入文件,关闭文件等。
  2. 一个 文件 是一个存储在磁盘中带有指定名称和目录路径的数据集合。当打开文件进行读写时,它变成一个 流。
    从根本上说,流是通过通信路径传递的字节序列。有两个主要的流:输入流 和 输出流。输入流用于从文件读取数据(读操作),输出流用于向文件写入数据(写操作)。
1、FileInfo和 DirectoryInfo 类的属性和方法
  • DirectoryInfo 类派生自 FileSystemInfo 类。它提供了各种用于创建、移动、浏览目录和子目录的方法。该类不能被继承。
  • FileInfo 类派生自 FileSystemInfo 类。它提供了用于创建、复制、删除、移动、打开文件的属性和方法,且有助于 FileStream 对象的创建。该类不能被继承。
using System;
using System.IO;
/*
 * c#编程高级学习
 * TextOperation
 * 2020/4/8
 */
namespace TextOperation
{
    class Program
    {
        static void Main(string[] args)
        {
            //文本操作
            //绝对路径   加上文件完整的路径名
            FileInfo fileInfo = new FileInfo(@"D:\Unity\TextOperation\TextFile1.txt");
            //Exists  该文件存在则返回true,否则返回false
            Console.WriteLine(fileInfo.Exists);
            //Name  取得文件名
            Console.WriteLine(fileInfo.Name);
            //Directory  取得目录路径
            Console.WriteLine(fileInfo.Directory);
            //Length  取得文件大小(字节)
            Console.WriteLine(fileInfo.Length);

            //fileInfo.CopyTo("File.txt");   //复制
            //fileInfo.Delete();   //删除
            FileInfo fileInfo1 = new FileInfo(@"D:\Unity\TextOperation\File1.txt");
            if (fileInfo1.Exists == false)
            {
                fileInfo1.Create();   //生成
            }
            //fileInfo1.MoveTo("File2.txt");   //相当于剪切重命名

            //文件夹操作
            DirectoryInfo dirInfo = new DirectoryInfo(@"D:\Unity\TextOperation");
            Console.WriteLine(dirInfo.CreationTime);   //创建时间
            dirInfo.CreateSubdirectory("Role");   //创建子文件夹

            Console.ReadKey();
        }
    }
}
2、使用File读写文件
using System;
using System.IO;
/*
 * c#编程高级学习
 * 使用File读写文件
 * 2020/4/8
 */
namespace 使用File读写文件
{
    class Program
    {
        static void Main(string[] args)
        {
            //把每一行文本读取成一个字符串,最后组成一个字符串的数组
            //string[] strArray = File.ReadAllLines(@"D:\Unity\使用File读写文件\Text1.txt");
            //把文本读取成一个字符串
            //string s = File.ReadAllText(@"D:\Unity\使用File读写文件\Text1.txt");
            //Console.WriteLine(s);
            //把图片读取成字节数组
            byte[] byteArray = File.ReadAllBytes(@"D:\Unity\使用File读写文件\捕获03.PNG");

            //生成或覆盖文本,写入一个字符串数组 (此处使用相对路径)
            File.WriteAllLines("Text1.txt", new string[] { "asd","rew","trg"});
            //生成或覆盖文本,写入一个字符串
            File.WriteAllText("Text1.txt", "aewfgre");
            //相当于完成一个复制
            File.WriteAllBytes("Text1.txt", byteArray);
            Console.WriteLine("Hello World!");
            Console.ReadKey();
        }
    }
}
3、使用FileStream读写文件
  • System.IO 命名空间中的 FileStream 类有助于文件的读写与关闭。该类派生自抽象类 Stream。
using System;
using System.IO;
/*
 * c#编程高级学习
 * 使用FileStream读写文件
 * 2020/4/8
 */
namespace 使用FileStream读写文件
{
    class Program
    {
        static void Main(string[] args)
        {
            //1、创建文件流用来操作文件
            //FileStream fileStream = new FileStream(@"D:\Unity\使用FileStream读写文件\TextFileA.txt",
            //    FileMode.Open);
            //byte[] data = new byte[1024];   //数据容器
            2、读取或者写入数据  Read 返回读入缓冲区中的总字节数(到达流的末尾,返回0)
            //int length = fileStream.Read(data, 0, data.Length);
            //while (true)
            //{
            //    if (length == 0)
            //    {
            //        Console.WriteLine("读取结束");
            //    }
            //    for(int i = 0; i < length; i++)
            //    {
            //        Console.Write(data[i]+" "); 
            //    }
            //}
            //2、使用文件流来完成图片复制
            FileStream readStream = new FileStream(@"D:\Unity\使用FileStream读写文件\批注 2019-12-26 140259.png",
                FileMode.Open);
            FileStream WriteStream = new FileStream("fuben.png", FileMode.Create);
            byte[] data = new byte[1024];
            int length = readStream.Read(data, 0, data.Length);
            while (true)
            {
                if (length == 0)
                {
                    Console.WriteLine("读取结束");
                }
                else
                {
                    WriteStream.Write(data, 0, length);
                }
            }
            WriteStream.Close();
            readStream.Close();
            Console.ReadKey();
        }
    }
}
4、使用StreamReader和StreamWriter读写文本文件
  • StreamReader 和 StreamWriter 类用于文本文件的数据读写。这些类从抽象基类 Stream 继承,Stream 支持文件流的字节读写。
    在这里插入图片描述
using System;
using System.IO;
/*
 * c#编程高级学习
 * 使用StreamReader和StreamWriter读写文本文件
 * 2020/4/10
 */
namespace 使用StreamReader和StreamWriter读写文本文件
{
    class Program
    {
        static void Main(string[] args)
        {
            //文本文件读取流
            //StreamReader reader = new StreamReader("Text1.txt");
            //方法1
            //while (true)
            //{
            //    string str = reader.ReadLine();   //读取一行字符串
            //    if (str == null)
            //        break;
            //    Console.WriteLine(str);
            //}
            //方法2
            //reader.ReadToEnd();   //读取所有字符串
            //方法3
            //while (true)
            //{
            //    int res = reader.Read();   //读取
            //    if (res == -1)
            //    {
            //        break;
            //    }
            //    Console.Write((char)res);
            //}
            //reader.Close();

            //文本文件写入流
            StreamWriter writer = new StreamWriter("Test2.txt");
            while (true)
            {
                string input = Console.ReadLine();
                if (input == "s")
                {
                    break;
                    Console.WriteLine("用户输入完毕");
                }
                writer.WriteLine(input);   //写入一个字符串并换行
            }
            writer.Close();
            Console.WriteLine("Hello World!");
            Console.ReadKey();
        }
    }
}
5、总结

在这里插入图片描述

附加:基本I/O操作
  • I/O操作主要针对计算机文件的创建和修改,在游戏中,最常见的功能是将游戏记录写入一个文件中,并可以随时读取,这个过程主要包括创建文件、读写文件和删除文件。
using System.IO;
using UnityEngine;

public class WriteFile : MonoBehaviour
{
    //存储文件的路径和文件名
    string file = "d:\\test.dat";
    //用于存储的数据
    string[] data = new string[] { "第一条信息!" , "第二条信息!" };
    string[] dataList = new string[1024];
    // Start is called before the first frame update
    void Start()
    {       
        if (File.Exists(file) == false)
        {
            //将两条信息写入C盘的test.dat文件中
            File.Create(file);
            File.WriteAllLines(file, data);
        }
        //将C盘的test.dat文件中的数据读出
        dataList = File.ReadAllLines(file);

        //打印数据
        foreach (string item in dataList)
        {
            Debug.Log(item);
        }
        //删除文件
        if (File.Exists(file))
        {
            File.Delete(file);
        }
    }
}
  • 二进制读写:
  • 无论是int、float或是其他类型,都可以将其转换成byte(字节)存入数组中,然后写入到文件中,读取回来时再转换成正确的数据类型使用,如下:
        string file2 = "d:\\test.dat";
        //需要存储的数据
        int data1 = 100;
        float data2 = 200.0f;
        //创建新文件
        FileStream fs = new FileStream(file2, FileMode.Create);
        //二进制写入器
        BinaryWriter bw = new BinaryWriter(fs);
        //写数据到文件中
        bw.Write(data1);
        bw.Write(data2);
        //关闭写入器
        bw.Close();
        fs.Close();   //不要忘记关闭文件
        //读取文件
        fs = new FileStream(file2, FileMode.Open);
        //二进制读取器
        BinaryReader br = new BinaryReader(fs);
        //注意读的顺序要和写的一致
        int readInt = br.ReadInt32();
        float readFloat = br.ReadSingle();
        br.Close();
        fs.Close();
        //打印数据
        Debug.LogFormat("{0},{1}", data1, data2);
总结

IO操作在程序开发中非常重要,但使用的类并不多,其中最主要的几个类包括FileStream(文件流)、FileInfo、File(功能近似FileInfo,但全部静态实现)、DirectoryInfo、Directory(功能和DirectoryInfo类似,但全部静态实现)、Path(处理路径名称)等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值