1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Correcting code

Discussion in 'MFC' started by stp, Feb 12, 2008.

  1. stp

    stp New Member

    Joined:
    Feb 8, 2008
    Messages:
    7
    Likes Received:
    0
    Trophy Points:
    0
    This code is from another forums - How to search for files in a directory and subdirectories?

    When I run the code it shows the path + name of the file
    Example:
    C:\New Folder\qqq\www\myfile.txt


    How to correct it to show me only the name of the file
    myfile.txt

    Code:
    #include <string>
    #include <vector>
    #include <iostream>
    
    #include <windows.h>
    #include <conio.h>
    
    
    
    int SearchDirectory(std::vector<std::string> &refvecFiles,
                        const std::string        &refcstrRootDirectory,
                        const std::string        &refcstrExtension,
                        bool                     bSearchSubdirectories = true)
    {
      std::string     strFilePath;             // Filepath
      std::string     strPattern;              // Pattern
      std::string     strExtension;            // Extension
      HANDLE          hFile;                   // Handle to file
      WIN32_FIND_DATA FileInformation;         // File information
    
    
      strPattern = refcstrRootDirectory + "\\*.*";
    
      hFile = ::FindFirstFile(strPattern.c_str(), &FileInformation);
      if(hFile != INVALID_HANDLE_VALUE)
      {
        do
        {
          if(FileInformation.cFileName[0] != '.')
          {
            strFilePath.erase();
            strFilePath = refcstrRootDirectory + "\\" + FileInformation.cFileName;
    
            if(FileInformation.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
            {
              if(bSearchSubdirectories)
              {
                // Search subdirectory
                int iRC = SearchDirectory(refvecFiles,
                                          strFilePath,
                                          refcstrExtension,
                                          bSearchSubdirectories);
                if(iRC)
                  return iRC;
              }
            }
            else
            {
              // Check extension
              strExtension = FileInformation.cFileName;
              strExtension = strExtension.substr(strExtension.rfind(".") + 1);
    
              if(strExtension == refcstrExtension)
              {
                // Save filename
                refvecFiles.push_back(strFilePath);
              }
            }
          }
        } while(::FindNextFile(hFile, &FileInformation) == TRUE);
    
        // Close handle
        ::FindClose(hFile);
    
        DWORD dwError = ::GetLastError();
        if(dwError != ERROR_NO_MORE_FILES)
          return dwError;
      }
    
      return 0;
    }
    
    
    int main()
    {
      int                      iRC         = 0;
      std::vector<std::string> vecAviFiles;
      std::vector<std::string> vecTxtFiles;
    
    
      // Search 'c:' for '.avi' files including subdirectories
      iRC = SearchDirectory(vecAviFiles, "c:", "avi");
      if(iRC)
      {
        std::cout << "Error " << iRC << std::endl;
        return -1;
      }
    
      // Print results
      for(std::vector<std::string>::iterator iterAvi = vecAviFiles.begin();
          iterAvi != vecAviFiles.end();
          ++iterAvi)
        std::cout << *iterAvi << std::endl;
    
      // Search 'c:\textfiles' for '.txt' files excluding subdirectories
      iRC = SearchDirectory(vecTxtFiles, "c:\\textfiles", "txt", false);
      if(iRC)
      {
        std::cout << "Error " << iRC << std::endl;
        return -1;
      }
    
      // Print results
      for(std::vector<std::string>::iterator iterTxt = vecTxtFiles.begin();
          iterTxt != vecTxtFiles.end();
          ++iterTxt)
        std::cout << *iterTxt << std::endl;
    
      // Wait for keystroke
      _getch();
    
      return 0;
    }
    
     

Share This Page