• 文件遍历


    #include <windows.h>
    #include <tchar.h> 
    #include <stdio.h>
    #include <strsafe.h>
    #pragma comment(lib, "User32.lib")
    
    void DisplayErrorBox(LPTSTR lpszFunction);
    
    int _tmain(int argc, TCHAR *argv[])
    {
        WIN32_FIND_DATA ffd;
        LARGE_INTEGER filesize;
        TCHAR szDir[MAX_PATH];
        size_t length_of_arg;
        HANDLE hFind = INVALID_HANDLE_VALUE;
        DWORD dwError=0;
        
        // If the directory is not specified as a command-line argument,
        // print usage.
        
        if(argc != 2)
        {
            _tprintf(TEXT("
    Usage: %s <directory name>
    "), argv[0]);
            return (-1);
        }
        
        // Check that the input path plus 3 is not longer than MAX_PATH.
        // Three characters are for the "*" plus NULL appended below.
        
        StringCchLength(argv[1], MAX_PATH, &length_of_arg);
        
        if (length_of_arg > (MAX_PATH - 3))
        {
            _tprintf(TEXT("
    Directory path is too long.
    "));
            return (-1);
        }
        
        _tprintf(TEXT("
    Target directory is %s
    
    "), argv[1]);
        
        // Prepare string for use with FindFile functions.  First, copy the
        // string to a buffer, then append '*' to the directory name.
        
        StringCchCopy(szDir, MAX_PATH, argv[1]);
        StringCchCat(szDir, MAX_PATH, TEXT("\*"));
        
        // Find the first file in the directory.
        
        hFind = FindFirstFile(szDir, &ffd);
        
        if (INVALID_HANDLE_VALUE == hFind) 
        {
            DisplayErrorBox(TEXT("FindFirstFile"));
            return dwError;
        } 
        
        // List all the files in the directory with some info about them.
        
        do
        {
            if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                _tprintf(TEXT("  %s   <DIR>
    "), ffd.cFileName);
            }
            else
            {
                filesize.LowPart = ffd.nFileSizeLow;
                filesize.HighPart = ffd.nFileSizeHigh;
                _tprintf(TEXT("  %s   %ld bytes
    "), ffd.cFileName, filesize.QuadPart);
            }
        }
        while (FindNextFile(hFind, &ffd) != 0);
        
        dwError = GetLastError();
        if (dwError != ERROR_NO_MORE_FILES) 
        {
            DisplayErrorBox(TEXT("FindFirstFile"));
        }
        
        FindClose(hFind);
        return dwError;
    }
    
    
    void DisplayErrorBox(LPTSTR lpszFunction) 
    { 
        // Retrieve the system error message for the last-error code
        
        LPVOID lpMsgBuf;
        LPVOID lpDisplayBuf;
        DWORD dw = GetLastError(); 
        
        FormatMessage(
            FORMAT_MESSAGE_ALLOCATE_BUFFER | 
            FORMAT_MESSAGE_FROM_SYSTEM |
            FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL,
            dw,
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR) &lpMsgBuf,
            0, NULL );
        
        // Display the error message and clean up
        
        lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, 
            (lstrlen((LPCTSTR)lpMsgBuf)+lstrlen((LPCTSTR)lpszFunction)+40)*sizeof(TCHAR)); 
        StringCchPrintf((LPTSTR)lpDisplayBuf, 
            LocalSize(lpDisplayBuf) / sizeof(TCHAR),
            TEXT("%s failed with error %d: %s"), 
            lpszFunction, dw, lpMsgBuf); 
        MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK); 
        
        LocalFree(lpMsgBuf);
        LocalFree(lpDisplayBuf);
    }
    void 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("Search error!");
            return;
        }
        while(::FindNextFile(hError, &FindData))
        {
            if (strcmp(FindData.cFileName, ".") == 0 
                || strcmp(FindData.cFileName, "..") == 0 )
            {
                continue;
            }
    
            wsprintf(FullPathName, "%s\%s", Path,FindData.cFileName);
            FileCount++;
            printf("
    %d  %s  ", FileCount, FullPathName);
    
            if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
                printf("<Dir>");
                DirectoryList(FullPathName);
            }
        }
    }
  • 相关阅读:
    [C++]2-5 分数化小数
    [C++]2-4 子序列的和
    [C++]2-3 倒三角形
    [C++]2-2 韩信点兵
    [C++]2-1 水仙花数
    [C++]竞赛模板·数据统计与IO(重定向版与非重定向版)
    数学建模·经验小结
    信息检索·论文写作
    PPT制作
    演讲与语言表达
  • 原文地址:https://www.cnblogs.com/jiaoluo/p/3524208.html
Copyright © 2020-2023  润新知