Q: Daten suchen und Kopieren



  • findfirst, findnext sind richtig fuer windows.

    du willst allerdings deine rekursion in den griff bekommen.



  • ^^und genau das ist mein problem. Im netzt fin d ich so viel quelltext über VB. Sogar genau das was ich brauc. Allerdings bin ich nur der C sprache mächtig. Weiteres problem: Auf der arbeit kein internet!

    Also, wie bekomm ich die find next und findfirst rekursiv hin?
    Hat jemand ein beispiel?
    Ich versuchs momentan die gefundenen ordner in ein array zu schreiben und dieses dann wieder an den gerade gesuchten pfad anzuhängen.

    Danke!

    Greetings

    Schon wieder edited:
    Wie kann ich win API funktionen einbinden? Hatt ich noch nie. War heute auch ein Thema. Und kann mir jemand die mailen/ Sagen wo ich die find? Ist doch eigendlich ne dll, oder?



  • http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1046380353&id=1044780608

    Musst dir nur das richtige Beispiel raussuchen.

    Bitte. Danke. Tschüss.



  • Bitte. Danke. Tschüss.

    🙄



  • Hmm? Was ist denn 🙄 ?



  • Noctis: du weisst nicht was rekursion ist. informiere dich ueber rekursion.



  • ja, ne funktion die sich selbst aufruft. Die aber jederzeit gestoppt werden kann

    habs jetzt zum teil. allerdings ohne Rekursion. Mach mit dem "system" Befehl eine "verzeichnisdatei" und les diese wieder aus. So hab ich gleichzeitig ein protokoll und kann nicht gewünschte pfade einfach aus der txt datei löschen.

    main()
    {
      system("dir E:\\CAE\\ /ad /b /l /s > E:\\CAE\\Verzeichnisse.txt"); //erstellen
    }
    

    wie kann ich dieser funktion sagen, dass das verzeichnis dynamisch ist und nicht wie jetzt statisch?
    Also mit 'defines' oder 'scanfs'

    greetings



  • ich verstehe nicht.

    wenn du einen string neu aufbauen willst, guck dir sprinf an.



  • nein, hassu falsch verstanden, oder ich falsch beschrieben.
    Ich such ne möglichkeit in den system befehl variablen einzubauen. Allerdings denk ich nicht, das das geht.
    In diesem fall will ich ne ini schreiben in der das zielverzeichnis (oben: E:\...) steht.

    wie könnt ich sowas realisieren?

    greets



  • mit sprintf



  • beispiel?
    Mit sprintf tuh ich doch was in nen string schreiben/ Kopieren. Ich will allerdings das zeug in den system befehl rein schreiben.
    Oder meinst du, den gesammten inhalt in nen string zu schreiben? Das wäre matürlich ne lösung.

    Greets



  • Noctis schrieb:

    Das wäre matürlich ne lösung.

    D'oh.



  • kann es sein, dass wir aneinander vorbeischreiben? Das mit dem string kopieren/ in einen string schreiben wusst ich schon, die frage ist, wie ich das in den system befehl einbinden kann.

    also:

    system("dir/s >list.txt")
    wird zu
    system("%s",strin1)???

    greets



  • Bitte tu DIR und UNS den Gefallen und lern C.



  • char foo[100];
    sprintf(foo, "yadda %s yadda %d", "lol", 42);
    system(foo);

    Noctis, *wirklich*, erst lernen und dann frickeln.
    http://www.pronix.de/pronix-4.html



  • cool, dass man hier von unregistrierten benutzern so nett empfangen wird.
    War zumindes aus meiner sicht ne ganz normale frage. Das mit dem "du kannst nen string in den system befehl schreiben" wusst ich net.
    Steht auch nicht in dem Bibliotheksbuch vom Borland.

    aber danke @c.rackwitz



  • Noctis schrieb:

    "du kannst nen string in den system befehl schreiben"

    ist auch falsch.
    du rufst eine funktion mit einem string als argument auf. ob der nun eine konstante oder vorher mit sprintf befuellt ist, ist irrelevant fuer system().

    gib das buch zurueck; es taugt offensichtlich nichts und bringt dir veraltete sprache bei.
    sieh dir das an: http://www.pronix.de/pronix-4.html



  • @Noctis: hm, nachdem das ganze nach windows user riecht...

    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
    #include <direct.h>
    
    #include <windows.h>
    
    inline bool getCwd( char **ppcDest );
    bool runThrough( char *pcDir );
    
    int main( int argc, char *argv[] )
    {
      char *cwd = NULL;
    
      if( !getCwd( &cwd ) ) {
        cprintf( "Couldn't determine current working directory!\r\n" );
        getch();
        return -1;
      }
      cprintf( "%s\r\n", cwd );
    
      // begin our cracy run ;)
      runThrough( cwd );
      free( cwd );
    
      return 0;
    }
    
    inline bool getCwd( char **ppcDest )
    {
      return ( *ppcDest = _getdcwd( _getdrive(), NULL, 0 ) ) != NULL;
    }
    
    bool runThrough( char *pcDir )
    {
      char *pcFindPattern = (char*) malloc( strlen(pcDir) + 3 );
      if( !pcFindPattern )
        return false;
      sprintf( pcFindPattern, "%s\\*", pcDir );
      WIN32_FIND_DATA findData;
      HANDLE hFind = FindFirstFile( pcFindPattern, &findData );
      free( pcFindPattern );
      if( hFind == INVALID_HANDLE_VALUE )
        return false;
    
      do {
        cprintf( "%s\r\n", findData.cFileName );
        if( findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {
          if( strncmp( findData.cFileName, ".", strlen(findData.cFileName) ) != 0 &&
          strncmp( findData.cFileName, "..", strlen(findData.cFileName) ) ) {
            char *pcSubDir = (char*) malloc( strlen(pcDir) + strlen(findData.cFileName) + 2 );
            if( !pcSubDir ) {
              FindClose( hFind );
              return false;
            }
            sprintf( pcSubDir, "%s\\%s",  pcDir, findData.cFileName );
            runThrough( pcSubDir );
            free( pcSubDir );
          }
        }
      } while( FindNextFile( hFind, &findData ) );
      FindClose( hFind );
    }
    

    aber bitte, um himmelswillen, google mal nach rekursion

    @ others: Könnt' das mal einer lesen, der Ahnung hat? Hab' schon ziemlich lange nix mehr proggt -> gebt euren Senf dazu 😉

    greetz, neox86


Anmelden zum Antworten