熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C# 如何獲取指定目錄包含的文件和子目錄

2013-11-13 10:41:30  來源: .NET編程 

  如何獲取指定目錄包含的文件和子目錄
DirectoryInfoGetFiles()獲取目錄中(不包含子目錄)的文件返回類型為FileInfo[]支持通配符查找
DirectoryInfoGetDirectories()獲取目錄(不包含子目錄)的子目錄返回類型為DirectoryInfo[]支持通配符查找
DirectoryInfo GetFileSystemInfos()獲取指定目錄下(不包含子目錄)的文件和子目錄返回類型為FileSystemInfo[]支持通配符查找
如何獲取指定文件的基本信息
FileInfoExists獲取指定文件是否存在
FileInfoNameFileInfoExtensioin獲取文件的名稱和擴展名
FileInfoFullName獲取文件的全限定名稱(完整路徑)
FileInfoDirectory獲取文件所在目錄返回類型為DirectoryInfo
FileInfoDirectoryName獲取文件所在目錄的路徑(完整路徑)
FileInfoLength獲取文件的大小(字節數)
FileInfoIsReadOnly獲取文件是否只讀
FileInfoAttributes獲取或設置指定文件的屬性返回類型為FileAttributes枚舉可以是多個值的組合
FileInfoCreationTimeFileInfoLastAccessTimeFileInfoLastWriteTime分別用於獲取文件的創建時間訪問時間修改時間

遍歷文件夾
文件夾是樹形結構遍歷算法有廣度優先級和深度優先級
區別廣度首先查找同一層目錄深度首先遍歷一條分支有了這個區別就可以確定鏈表的插入位置即廣度遍歷插入點總在末尾深度遍歷插入點在首部詳細看代碼
public static void searchFile(String path List<Object> resultList) {
File file = new File(path);
if (fileisDirectory()) {
LinkedList<File[]> levelLinked = new LinkedList<File[]>();
levelLinkedadd(filelistFiles());
do {
File[] childFiles = levelLinkedremove();
for (File cf : childFiles) {
if (cfisDirectory()) {
// 此處控制遍歷的方向
levelLinkedadd(cflistFiles());// 廣度
// levelLinkedadd( cflistFiles());//深度
} else {
String fileName = cfgetName();// 文件名有後綴
String filePath = cfgetAbsolutePath();// 絕對路徑
String fileParent = cfgetParent();// 上層路徑注意最後的/
// 比較算法找到後放入集合
String[] sf = { fileName fileParent filePath };
resultListadd(sf);
}
}
} while (levelLinkedsize() > );
}
}
此處加入一些API提供的工具類希望有用
多後綴判斷javaclassjs等
String[] hz = {javaclassjs};
Arrayssort(hz);//下面的搜索需要排序例如class的順序在java之前如果不sort()class文件不會被查找
ArraysbinarySearch(hz fn_);//fn_文件後綴
如果明確目錄的層次結構簡單遞歸算法也是不錯的選擇
個人覺得文件的搜索應該單獨起線程

  ////////////////////////
采用遞歸的方式遍歷文件夾和子文件中的所有文件
public void FindFile(string dirPath) //參數dirPath為指定的目錄
{
//在指定目錄及子目錄下查找文件在listBox中列出子目錄及文件
DirectoryInfo Dir=new DirectoryInfo(dirPath);
try
{
foreach(DirectoryInfo d in DirGetDirectories()//查找子目錄
{
FindFile(Dir+dToString()+"");
listBoxItemsAdd(Dir+dToString()+""); //listBox中填加目錄名
}
foreach(FileInfo f in DirGetFiles("*")) //查找文件
{
listBoxItemsAdd(Dir+fToString()); //listBox中填加文件名
}
}
catch(Exception e)
{
MessageBoxShow(eMessage);
}

  }

  
用下面代碼限制文件的類型
foreach(FileInfo f in DirGetFiles("*")) //查找文件

  
“*”指要訪問的文件的類型的擴展名
///////////////////////////////
代碼改成如下會不會好一點

  DirectoryInfo TheFolder=new DirectoryInfo(folderFullName);

  DirectoryInfo[] dirInfo = TheFolderGetDirectories();
//遍歷文件夾
foreach(DirectoryInfo NextFolder in dirInfo)
thislistBoxItemsAdd(NextFolderName);

  FileInfo[] fileInfo = TheFolderGetFiles();
//遍歷文件
foreach(FileInfo Next


From:http://tw.wingwit.com/Article/program/net/201311/14311.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.