求一个windows下的纯C语言实现的文件夹遍历程序,要可以遍历子文件夹,不要unix下的和C++的。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一个windows下的纯C语言实现的文件夹遍历程序,要可以遍历子文件夹,不要unix下的和C++的。相关的知识,希望对你有一定的参考价值。

// 这是我以前写的一个,你参考参考 要用到windows API 函数

#include <windows.h>
#include <stdio.h>
#include <string.h>
#define LEN 1024
// 深度优先递归遍历目录中所有的文件
BOOL DirectoryList(LPCSTR Path)

WIN32_FIND_DATA FindData;
HANDLE hError;
int FileCount = 0;
char FilePathName[LEN];
// 构造路径
char FullPathName[LEN];
strcpy(FilePathName, Path);
strcat(FilePathName, "\\*.*");
hError = FindFirstFile(FilePathName, &FindData);
if (hError == INVALID_HANDLE_VALUE)

printf("搜索失败!");
return 0;

while (::FindNextFile(hError, &FindData))

// 过虑.和..
if (strcmp(FindData.cFileName, ".") == 0
|| strcmp(FindData.cFileName, "..") == 0 )

continue;


// 构造完整路径
wsprintf(FullPathName, "%s\\%s", Path,FindData.cFileName);
FileCount++;
// 输出本级的文件
printf("\n%d %s ", FileCount, FullPathName);

if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

printf("<Dir>");
DirectoryList(FullPathName);



return 0;


void main()

DirectoryList("G:");
参考技术A 伪代码:
void function(LPCTSTR lpszPath)

开始查找;
if (没有找到文件)
return;
do

if (找到的文件是目录)
function(找到的目录);
else
对文件进行操作;
while (查找下一个文件并成功);

实现这个算法所需要用到的API函数有:
·FindFirstFile;
·FindNextFile;

具体函数的用法 查看下msdn吧 或者google一下
参考技术B 我只能告诉你原理,你可以自己查相关的函数套用.!~!~!@@@

你先要切换到当前目录,就是你要遍历的地方.
这种方法是用递归,如果是文件,一直找下去.直到没有文件.这里也需要函数去判断这个文件是文件夹还是程序.
参考技术C 哥们 unix环境编程 也就是APUE里面有源代码 你可以照着改改

C语言怎么实现截图

能实现么 求具体思路

1、用C语言实现windows程序截图,太麻烦。建议用C++做比较好。
2、截图例程:

#ifndef CAPTUREBLT
#define CAPTUREBLT 0x40000000
#endif
HBITMAP CaptureScreen(LPRECT lpRect)//lpRect为NULL时表示全屏幕截图

    HDC      hdc, hdcMem ;
    HBITMAP  hemfCopy ;
    HWND     hwndScr ;
    int      dstcx, dstcy ;
    if(lpRect)
    
        dstcx = lpRect->right - lpRect->left ;
        dstcy = lpRect->bottom - lpRect->top ;
    
    else
    
        dstcx = GetSystemMetrics(SM_CXSCREEN) ;
        dstcy = GetSystemMetrics(SM_CYSCREEN) ;
    
    if (LockWindowUpdate(hwndScr = GetDesktopWindow ()))
    
        hdc  = GetDCEx (hwndScr, NULL, DCX_CACHE | DCX_LOCKWINDOWUPDATE) ;
        hdcMem = CreateCompatibleDC (hdc) ;
        if(NULL==hdcMem)
        
            ReleaseDC (hwndScr, hdc) ;
            LockWindowUpdate (NULL) ;
            return NULL;
        
        hemfCopy = CreateCompatibleBitmap (hdc, abs(dstcx), abs(dstcy)) ;
        if(NULL==hemfCopy)
        
            DeleteDC (hdcMem) ;
            ReleaseDC (hwndScr, hdc) ;
            LockWindowUpdate (NULL) ;
            return NULL;
        
        SelectObject (hdcMem, hemfCopy) ;
        if(lpRect)
            StretchBlt (hdcMem, 0, 0, abs(dstcx), abs(dstcy), 
                hdc, lpRect->left, lpRect->top, dstcx, dstcy, SRCCOPY|CAPTUREBLT) ;
        else
            BitBlt (hdcMem, 0, 0, dstcx, dstcy, 
                hdc, 0, 0, SRCCOPY|CAPTUREBLT) ;
        DeleteDC (hdcMem) ;
        ReleaseDC (hwndScr, hdc) ;
        LockWindowUpdate (NULL) ;
        return hemfCopy;
    
    return NULL;

参考技术A

    // MSDN 一下,GDI接口,GetSystemMetrics


#ifndef CAPTUREBLT

#define CAPTUREBLT 0x40000000

#endif

HBITMAP CaptureScreen(LPRECT lpRect)//lpRect为NULL时表示全屏幕截图

    HDC      hdc, hdcMem ;

    HBITMAP  hemfCopy ;

    HWND     hwndScr ;

    int      dstcx, dstcy ;

    if(lpRect)

   

        dstcx = lpRect->right - lpRect->left ;

        dstcy = lpRect->bottom - lpRect->top ;

   

    else

   

        dstcx = GetSystemMetrics(SM_CXSCREEN) ;

        dstcy = GetSystemMetrics(SM_CYSCREEN) ;

   

    if (LockWindowUpdate(hwndScr = GetDesktopWindow ()))

   

        hdc  = GetDCEx (hwndScr, NULL, DCX_CACHE | DCX_LOCKWINDOWUPDATE) ;

        hdcMem = CreateCompatibleDC (hdc) ;

        if(NULL==hdcMem)

       

            ReleaseDC (hwndScr, hdc) ;

            LockWindowUpdate (NULL) ;

            return NULL;

       

        hemfCopy = CreateCompatibleBitmap (hdc, abs(dstcx), abs(dstcy)) ;

        if(NULL==hemfCopy)

       

            DeleteDC (hdcMem) ;

            ReleaseDC (hwndScr, hdc) ;

            LockWindowUpdate (NULL) ;

            return NULL;

       

        SelectObject (hdcMem, hemfCopy) ;

        if(lpRect)

            StretchBlt (hdcMem, 0, 0, abs(dstcx), abs(dstcy), 

                hdc, lpRect->left, lpRect->top, dstcx, dstcy, SRCCOPY|CAPTUREBLT) ;

        else

            BitBlt (hdcMem, 0, 0, dstcx, dstcy, 

                hdc, 0, 0, SRCCOPY|CAPTUREBLT) ;

        DeleteDC (hdcMem) ;

        ReleaseDC (hwndScr, hdc) ;

        LockWindowUpdate (NULL) ;

        return hemfCopy;

   

    return NULL;

本回答被提问者和网友采纳

以上是关于求一个windows下的纯C语言实现的文件夹遍历程序,要可以遍历子文件夹,不要unix下的和C++的。的主要内容,如果未能解决你的问题,请参考以下文章

用c语言求一个四元二次方程解的个数

求一个可以linux虚拟机下可用的纯C语言编写的电子相册,有浏览,预览图片和背景音乐功能

C语言怎么实现截图

c语言(求改错):用邻接表创建图并实现深度优先遍历 不知道怎么改了 在线等 各位大神行行好!!!!

图的遍历和生成树求解实现 (c语言版)

求C语言高手! 1:用动画演示二叉树的三种遍历。2:绘制出一个小球,在屏幕左右端之间不停滚动。