- System.IO 命名空间有各种不同的类,用于执行各种文件操作,如创建和删除文件、读取或写入文件,关闭文件等。
- 一个 文件 是一个存储在磁盘中带有指定名称和目录路径的数据集合。当打开文件进行读写时,它变成一个 流。
从根本上说,流是通过通信路径传递的字节序列。有两个主要的流:输入流 和 输出流。输入流用于从文件读取数据(读操作),输出流用于向文件写入数据(写操作)。
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(处理路径名称)等。