一:前言
一個檔案是一個存儲在磁盤中帶有指定名稱和目标路徑的資料集合。當打開檔案進行讀寫時,它變成一個流。從根本上說,流是通過通信路徑傳遞的位元組序列。有兩個主要的流:輸入流和輸出流。輸入流用于從檔案讀取資料,輸出流用于向檔案寫入資料
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");