Logik Problem. Hat jmd ne Idee???



  • Hallo
    ich schreibe gerade an einem Programm, womit ich einen Ordner öffne und dann über die einzelnen Bilder ieteriere um im testfall die Namen der Bilder in ein File schreibe...
    Folgendes Problem. Ich habe einen Button: All bei dem der Ordner geöffnet wird. das Fubnktioniert fein und der Pfad wird in m_path gespeichert. Damit arbeite ich jetz weiter....

    Der Button Process soll jetzt die arbeit machen. Um

    void CtestDlg::onProcess () 
    {
    CString sDefault = "nichts";
    std::ofstream out ("myresults.txt"); //File öffnen
    
    while (m_fileName.Compare(sDefault)  // solange der Ordner nicht leer ist 
    {
      m_fileName = getFilename (m_path);  // Funktionszugriff auf getFilename
      proc = new Imageprocessor (m_fileName); // für spätere Anwendung relevant
      if (proc!= 0)
      {
        result = m_fileName; // Testweise den Filename in die Datei speichern
        out << result ;
      }
    }
    }
    

    Meine Funktion getFilename sieht so aus:

    CString CtestDlg::getFilename (CString nextdir)
    { 
    CString sFilePath;
    CFileFind finder;
    CString curdir = nextdir;
    CString finaldir;
    Cstring name;
    bool bIterator = finder.FindFile(curdir+ "\\*.*");
    
    while (bIterator > O) 
    {
      bIterator = finder.FindNextFile();
      name = finder.GetFileName();
      if (name == "." || name == "..") {}
      else 
       if (finder.IsDirectors()!= 0) 
       {
        nextdir = curdir + "\\" + name;
        getFilename (nextdir);
       }
       else 
       {
        sFilePath = finder.GetFilePath();
        return sFilePath;
       }
    }
    CString sDefault = "nichts";
    return sDefault;
    finder.Close();
    }
    

    So. das Problem ist, dass ich ja immer wieder in das GetFilename gehe, um dort meinen Pfad herzubekommen....
    Und der Pfad ist offensichtlich ja immer der selbe, weil die Stelle wo der Iterator ist nicht gespeichert wird.
    Wie kann ich das lösen??
    Danke



  • sorry, aber es ist echt dringend... ich komme einfach nicht weiter !

    HHHIIIILLLLFFFEEE !



  • So etwas geht in C++ nicht. Wegen der Rekursion würde dir auch eine statische Variable nicht helfen. In .NET 2.0 könntest du das mit yield machen.

    Schreib die Funktion so um, dass sie eine Liste füllt, und iteriere hinterher über diese Liste.



  • Und wie mache ich das am besten? kannst du mir vielleicht helfen?



  • Forza schrieb:

    Und wie mache ich das am besten?

    Mach's erst mal so, dass es geht. Um Optimierungen kannst du dich später kümmern.

    kannst du mir vielleicht helfen?

    Wo ist konkret das Problem?



  • wie speicher ich die Sachen am Besten? In einem Array, oder in einem Vektor?



  • In einem Vector, weil du vorher nicht weißt, wie viele es werden.



  • ok, ich probiers mal!


Anmelden zum Antworten