天天看點

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");           

繼續閱讀