Directory search C++/CLI

Status
Niet open voor verdere reacties.

Dragonlord

Gebruiker
Lid geworden
26 sep 2006
Berichten
163
Hoi,

Ik wil graag een applicatie bouwen die in C++/CLI een recursieve directory search doet naar afbeeldingen, En maakt een lijst die wordt opgeslagen in een stack. Kan iemand daar mee op weg helpen.
 
Dit is niet echt een vraag... dit is meer een opdracht...

Jij wilt iets maken maar je wilt iemand die je op weg helpt...

Probeer eerst ergens heen te gaan en als je tegen een probleem aanloopt post het dan
 
Dat is een beetje afhankelijk van je compiler en omgeving. Het is niet zo heel moeilijk met recursie maar de commando's verschillen per implementatie.
 
Ik ben nu iets verder dan er voor. Ik heb de volgende code.

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)
{
  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)
        {
         
                              int iRC = SearchDirectory(refvecFiles,strFilePath, refcstrExtension);
             
            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> vecPngFiles;
  
    // Search certain directory for '.PNG' imagesfiles including subdirectories
  iRC = SearchDirectory(vecPngFiles, "C:\\Users\\test\\Desktop", "png");
   if(iRC)
  {
    std::cout << "Error " << iRC << std::endl;
    return -1;
  }

  // Print results of the .png
  for(std::vector<std::string>::iterator iterPng = vecPngFiles.begin();
      iterPng != vecPngFiles.end();
      ++iterPng)
    std::cout << *iterPng << std::endl;
  
  // Wait for keystroke for exiting the program
  getch();

  return 0;
}



Dit is wat het doet, In een directory zoeken naar afbeeldingen met een .PNG extensie en toon de lijst met namen op het scherm. Mijn volgende stap is hoe implementeer ik een recursieve directory, dat wanneer er nieuwe foto's in dat directory geplaatst wordt, dat automatische de lijst geüpdatet wordt.
 
Laatst bewerkt:
Puur vanuit je programma ? Niet. Je kunt je (in windows) registreren op het update event. Je kunt wijzigingen na je initiele lijst dan afvangen aan de hand van die updates. Als je dat niet wil is er niet echt een alternatief dan steeds opnieuw de directories doorlopen.
 
Bedankt voor je antwoord.
Directory opnieuw zoeken kan ik dat ook automatische laten doen of elke keer moet de applicatie opnieuw worden opgestart om de lijst te voorzien van nieuwe foto's
 
Kan prima door je code nogmaals aan te roepen. Het is vaak wel verstandig om dat dan via een aparte thread te doen. Dan loopt je hoofdprogramma gewoon door terwijl de directories gerefreshed worden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan