前言:編輯器拓展常常要訪問(wèn)到文件目錄。所以文件相關(guān)的操作挺重要的富岳。這里記錄下遍歷目錄的方法:
-
這里先列舉下會(huì)用到的類
- FileInfo : 文件類(不包括目錄)
- DirectoryInfo : 目錄類
-
FileSystemInfo :通用文件類蛔溃,可以是文件举畸,也可以是目錄涵防。
可以通過(guò)FileSystemInfo.Attributes 來(lái)判斷是不是目錄:
bool isDir = fileSystemInfo.Attributes == FileAttributes.Directory;
-
遍歷目錄里的所有文件
- 獲取一個(gè)目錄里的所有文件
public void AccessAllFile(string dirPath)
{
DirectoryInfo directoryInfo = new DirectoryInfo(dirPath);
//SearchOption.AllDirectories 代表遍歷子文件夾俄周。
//SearchOption.TopDirectoryOnly 或 不加參數(shù) 則只訪問(wèn)第一層文件
FileInfo[] fileInfos = directoryInfo.GetFiles("*", SearchOption.AllDirectories);
for (int i = 0; i < fileInfos.Length; i++)
{
Log.Debug($"name:{fileInfos[i].Name}");
}
}
- 獲取一個(gè)目錄里的所有文件夾
public void AccessAllDir(string dirPath)
{
DirectoryInfo directoryInfo = new DirectoryInfo(dirPath);
DirectoryInfo[] dirInfos = directoryInfo.GetDirectories("*", SearchOption.AllDirectories);
for (int i = 0; i < dirInfos.Length; i++)
{
Log.Debug($"name:{dirInfos[i].Name}");
}
}
- 獲取一個(gè)目錄的的所有文件夾和文件(方法1)
public void AccessAllFileAndDir(string dirPath)
{
DirectoryInfo directoryInfo = new DirectoryInfo(dirPath);
FileSystemInfo[] fileSystemInfos = directoryInfo.GetFileSystemInfos("*",SearchOption.AllDirectories);
for (int i = 0; i < fileSystemInfos.Length; i++)
{
var file = fileSystemInfos[i];
Log.Debug($"isDir:{file.Attributes == FileAttributes.Directory} name:{file.Name}");
}
}
- 獲取一個(gè)目錄的的所有文件夾和文件(方法2:自己遞歸)
public void AccessAllFileAndDir2(string dirPath)
{
DirectoryInfo directoryInfo = new DirectoryInfo(dirPath);
FileSystemInfo[] fileSystemInfos = directoryInfo.GetFileSystemInfos();
for (int i = 0; i < fileSystemInfos.Length; i++)
{
var fileSystemInfo = fileSystemInfos[i];
bool isDir = fileSystemInfo.Attributes == FileAttributes.Directory;
if (isDir)
{
Debug.Log($"dir name:{fileSystemInfo.Name}");
AccessAllFileAndDir2(fileSystemInfo.FullName);
}
else
{
Debug.Log($"file name:{fileSystemInfo.Name}");
}
}
}
- 最后星澳,附上一個(gè)刪除目錄里所有文件的方法疚顷,讓一切歸于平靜...
public void DeleteAllFile(string dir)
{
DirectoryInfo directoryInfo = new DirectoryInfo(dir);
FileSystemInfo[] fileSystemInfos = directoryInfo.GetFileSystemInfos();
for (int i = 0; i < fileSystemInfos.Length; i++)
{
FileSystemInfo file = fileSystemInfos[i];
bool isDir = file.Attributes == FileAttributes.Directory;
if (isDir)
{
Directory.Delete(file.FullName,true);
}
else
{
File.Delete(file.FullName);
}
}
}