路径下文件遍历

自己总结了磁盘路径下的文件遍历供大家分享,遍历有深度和广度之分,而,对于路径较长的遍历,无疑广度是最佳选择,深度遍历的递归性消耗大量的资源占用。而广度则为优选。

深度递归遍历为在指定路径下,加上\*进行遍历,遇到文件夹后,则进入文件夹内进行新的遍历,直到文件夹下全是文件,各种递归,完成。

广度遍历则是在遍历指定路径下文件后,进行遍历遇到文件夹进行压栈,然后继续循环在本文件夹下完成后,再从栈中取出文件夹进行层层遍历,最后,完成。

主要的函数,数据结构:WIN32_FIND_DATA FindFirstFile(),  FindNextFile()

递归遍历:

void MyFindFile(const char *pFileName, char* pext = ".*")

{

char szFile[MAX_PATH*100]; 

char szTmp[MAX_PATH]; 

char szPath[MAX_PATH*100]; 

WIN32_FIND_DATA find_data;

strcpy(szPath,pFileName);

strcpy(szFile,szPath);

strcat(szFile,"\\*");

strcat(szFile, pext);

//C:\Documents and Settings\Administrator\◊¿√Ê\machfe\*.txt

HANDLE  hHandle = FindFirstFile(szFile,  &find_data);

if(hHandle!= NULL )

{

do{

if(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )

{

if(find_data.cFileName[0] != '.')

{

strcpy(szTmp,szPath);

strcat(szTmp,"\\");

strcat(szTmp, find_data.cFileName);  

//Sleep(100);

MyFindFile(szTmp);

}

}

else

 

printf("%s//%s\n", szPath, find_data.cFileName);

//Sleep(100);

}

}while(FindNextFile(hHandle,&find_data) );

FindClose(hHandle);

}

}

广度遍历:

void BreathFindFile(const char *pFileName, char* pext = ".*")

{

char szFile[MAX_PATH]; 

char szTmp[MAX_PATH]; 

char szPath[MAX_PATH]; //µ±«∞…®√Ë∏˘¬∑æ∂

CStringList strStact;

WIN32_FIND_DATA find_data;

strcpy(szPath,pFileName);

do{

strcpy(szFile,szPath);

strcat(szFile,"\\*");

strcat(szFile, pext);

HANDLE  hHandle = FindFirstFile(szFile,  &find_data);

if(hHandle!= NULL )

{

do{

if(find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )

{

if(find_data.cFileName[0] != '.')

{

strcpy(szTmp,szPath);

strcat(szTmp,"\\");

strcat(szTmp, find_data.cFileName);   

strStact.AddTail(szTmp);

}

}

else

 

printf("%s//%s\n", szPath, find_data.cFileName);

}

}while(FindNextFile(hHandle,&find_data) );

FindClose(hHandle);

}

if( strStact.IsEmpty()  )

break; 

}

else

{

 CString strTmp = strStact.GetTail();

strStact.RemoveTail();

strcpy(szPath, strTmp.GetBuffer(0));

strTmp.ReleaseBuffer();

}

}while (TRUE);

}



转自:http://my.oschina.net/u/1027869/blog/121802
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java语言提供了丰富的API来遍历某个路径下的文件。可以通过File类来操作文件系统中的文件和目录。本文将介绍Java如何遍历某个路径下的文件。 首先需要使用File类来表示该路径,然后调用File类的listFiles()方法可以得到该路径下的所有文件文件夹。listFiles()方法返回一个File类型的数组,可以遍历该数组来获取每个文件路径和属性。 示例代码如下: ```java import java.io.*; public class FileTraversal { public static void main(String[] args) { File directory = new File("your/path/here"); // 替换为实际路径 File[] files = directory.listFiles(); if (files != null) { for (File file : files) { if (file.isDirectory()) { System.out.println("文件夹:" + file.getAbsolutePath()); // 递归遍历文件夹下的文件 traverse(file); } else { System.out.println("文件:" + file.getAbsolutePath()); } } } } private static void traverse(File directory) { File[] files = directory.listFiles(); if (files != null) { for (File file : files) { if (file.isDirectory()) { System.out.println("文件夹:" + file.getAbsolutePath()); traverse(file); } else { System.out.println("文件:" + file.getAbsolutePath()); } } } } } ``` 以上代码展示了如何遍历某个路径下的所有文件文件夹,同时也包括了递归遍历文件夹下的子文件夹和文件。在实际应用中,还可以根据需要进行文件过滤、排序等操作,来实现更加复杂的文件操作需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值