天天看点

Unity中的文件操作

一:前言

一个文件是一个存储在磁盘中带有指定名称和目标路径的数据集合。当打开文件进行读写时,它变成一个流。从根本上说,流是通过通信路径传递的字节序列。有两个主要的流:输入流和输出流。输入流用于从文件读取数据,输出流用于向文件写入数据

System.IO命名空间有各种不同的类,用于执行各种文件操作,如创建和删除文件、读取或写入文件,关闭文件等

二:FileInfo类、DirectoryInfo类

如果要对多个对象进行操作,则使用这两个类比较适合

——FileInfo相关

FileInfo fileInfo = new FileInfo("test.txt");
if (fileInfo.Exists)
{
    Debug.Log("文件目录:" + fileInfo.Directory);
    Debug.Log("文件目录名:" + fileInfo.DirectoryName);
    Debug.Log("文件总字节:" + fileInfo.Length);
}
else
{
    fileInfo.Create();//创建文件
    AssetDatabase.Refresh();
}

fileInfo.CopyTo("new_test.txt");//复制一份新文件
fileInfo.MoveTo("myTest.txt");//将此文件移动到某个路径(如果是当前文件路径则直接重命名)           

——DirectoryInfo相关

DirectoryInfo dirInfo = new DirectoryInfo("Assets/Test");
if (dirInfo.Exists)
{
    Debug.Log("目录名:" + dirInfo.Name);
    Debug.Log("目录上一级:" + dirInfo.Parent);
    Debug.Log("目录根:" + dirInfo.Root);
}
else
{
    dirInfo.Create();
    AssetDatabase.Refresh();
}

DirectoryInfo[] dirInfos = dirInfo.GetDirectories();//得到此文件夹下的所有子文件夹
FileInfo[] fileInfo = dirInfo.GetFiles("*.png");//得到此文件下的指定类型文件

dirInfo.MoveTo("Assets/NewTest");//将此文件夹移动到某个路径
dirInfo.CreateSubdirectory("sub");//创建子文件夹           

三:File类、Directory类

如果要对单个对象进行操作,则使用这两个类比较适合,这两个类只包含静态方法不能被实例化,使用时减少了实例化.Net类的系统开销

——File相关:

所有Write操作都遵循如果文件不存在则创建并且写入,如果存在则覆盖文件内容

if (File.Exists("Assets/newFile.txt"))
{
    File.WriteAllText("Assets/newFile.txt", "hello world\nthis is my test");//写入传入的字符串
    File.WriteAllLines("Assets/newFile.txt", new string[0]);//按行写入文件
    File.WriteAllBytes("Assets/newFile.txt", new byte[0]);//写入传入的字节

    string strs = File.ReadAllText("Assets/newFile.txt");//读取全部字符串
    string[] lines = File.ReadAllLines("Assets/newFile.txt");//按行读取
    byte[] bytes = File.ReadAllBytes("Assets/newFile.txt");//读取全部字节
}
else
{
    File.Create("Assets/newFile.txt");//创建一个新文件
    AssetDatabase.Refresh();
}           

——Directory相关

if (Directory.Exists("Assets/Test"))
{

}
else
{
    Directory.CreateDirectory("Assets/Test");//创建一个新目录
    AssetDatabase.Refresh();
}           

四:文件流方式读写文件

——StreamReader:读取文件

StreamReader sr = new StreamReader("test.txt");
sr.ReadLine();//每次只读取一行
sr.ReadToEnd();//读取全部字符串
sr.Close();//关闭流           

——StreamWriter:写入文件

StreamWriter sw = new StreamWriter("test.txt");
sw.Write("hello world");//写入字符串
sw.Flush();//刷新流
sw.Close();//关闭流           
//将一个图片字节信息复制给另一个图片
FileStream readStream = new FileStream("Assets/1.png", FileMode.Open);
FileStream writeStream = new FileStream("Assets/2.png", FileMode.Create);
byte[] data = new byte[1024];
while (true)
{
    int len = readStream.Read(data, 0, data.Length);
    if (len == 0)
    {
        break;
    }
    writeStream.Write(data, 0, data.Length);
    readStream.Close();
    writeStream.Close();
}           

五:Path类

string path = Path.Combine("Assets", "Test");//合并成一个路径           

六:其他操作

Process.Start("Assets");           

继续阅读