C语言递归目录下所有文件

/*
描写:C语言递归目录下所有文件 无聊写的
作者:朱剑
创建日期:2005/04/20
*/
#include
<Windows.h>
#include
<stdio.h>
void Directory(char path[])
{
    
char subpath[_MAX_PATH];
    
char temp[_MAX_PATH];
    WIN32_FIND_DATA lp;
    
char ss[_MAX_PATH];

    strcpy(temp,path);
    HANDLE h
=FindFirstFile(temp,&lp);

    temp[strlen(temp)
-1]='\0';
    
do
    {      
        
if((lp.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            
&& strcmp(lp.cFileName,"..")!=0 && strcmp(lp.cFileName,".")!=0)
        {            
           
//subpath
            sprintf(subpath,"%s%s\\*",temp,lp.cFileName);
            Directory(subpath);
        }
        
if((lp.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)!=FILE_ATTRIBUTE_DIRECTORY)
        {
           sprintf(ss,
"%s%s",temp,lp.cFileName);
            printf(
"%s\n",ss);
            Sleep(
100);
           
        }        
    } 
while(FindNextFile(h,&lp));
 
        FindClose(h);
}
void main()
{
    Directory(
"f:\\*");
}

 

 下面代码是在非常无聊的时候再次增加的。

下面代码支持unicode  和 ascii两种编码方式,并且支持超深目录的遍历(大概1400层左右深的目录)。

 

#include <Windows.h>
#include 
<stdio.h>
#include 
<tchar.h>


//工程选择加UNICODE,_UNICODE 宏就是UNICODE

//为什么UNICODE,_UNICODE 呢,一个是为c库函数,一个是为winapi用的

//加_MBCS就是ASCII

void dir(TCHAR * path)
{
    TCHAR 
* buff= (TCHAR *)malloc(200000);
    
//ZeroMemory(buff,0,_tclen(buff));
    WIN32_FIND_DATA fd={0};
    TCHAR 
* temp= (TCHAR *)malloc(200000);
    _tcscpy(buff,path);

    HANDLE h 
=FindFirstFile(buff,&fd);

    buff[_tcslen(buff)
-1]=TEXT('\0');
    
do 
    {
        
if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && _tcscmp(fd.cFileName,TEXT(".."))!=0 && _tcscmp(fd.cFileName,TEXT(".")))
        {
            _stprintf(temp,TEXT(
"%s%s\\*"),buff,fd.cFileName);
            dir(temp);
        }

        
if((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)!=FILE_ATTRIBUTE_DIRECTORY)
        {
            _stprintf(temp,TEXT(
"%s%s"),buff,fd.cFileName);
            _tprintf(TEXT(
"%s\n"),temp);
            Sleep(
100);
            
        }        
    } 
while (FindNextFile(h,&fd));
     FindClose(h);
     free(temp);
     free(buff);
}

void main()
{
#ifdef _UNICODE
    dir(TEXT(
"\\\\?\\f:\\*"));
#else
    dir(TEXT(
"f:\\*"));
#endif
    
}
posted @ 2008-05-14 19:11  debugzhu  阅读(1952)  评论(3编辑  收藏  举报