Dom++ Geschrieben 26. Juli 2005 Geschrieben 26. Juli 2005 Hallo! Ich habe folgendes Problem: Ich möchte aus einem Verzeichnis und seinen Unterverzeichnissen den Filename von allen .mp3 Dateien in einem Char[] abspeichern. (also ich brauche nur ein Char[] und in dem kann der alte Filename immer wieder überschrieben werden.) Ich arbeite mit Windows XP und denke, dass ich die Funktionen FindFirstFile und FindNextFile für dies notwendig ist. Ich habe versucht laut MSDN und anderen Suchen in google dies zu verwirklichen, jedoch bekomm ich nichts hin. Ich bekomme die Funktionen einfach nicht zum laufen... Ich hoffe ihr könnt mir helfen lg Dom Zitieren
Guybrush Threepwood Geschrieben 26. Juli 2005 Geschrieben 26. Juli 2005 Ich habe versucht laut MSDN und anderen Suchen in google dies zu verwirklichen, jedoch bekomm ich nichts hin. Wie wär die Suche hier? Da findest du dutzende Beispiele... Zitieren
Dom++ Geschrieben 26. Juli 2005 Autor Geschrieben 26. Juli 2005 naja... wenn ich das richtig verstehe ist der Pfad der gefundenen Datei in einer WIN32_FIND_DATA-Struktur gespeichert. Ich kann aber leider keinen Thread finden indem angegeben wird wie ich daraus den Pfad auslese und dann in ein Variable vom Typ Char[] einlese. ps.: blöde Frage: welche Datei muss ich headern dass er diese struct erkennt? lg Zitieren
Goos Geschrieben 26. Juli 2005 Geschrieben 26. Juli 2005 ps.: blöde Frage: welche Datei muss ich headern dass er diese struct erkennt? lg MSDN oeffnen, WIN32_FIND_DATA eingeben, runterscrollen zu Requirements, lesen bei Header Goos Zitieren
Dom++ Geschrieben 26. Juli 2005 Autor Geschrieben 26. Juli 2005 danke hm komischerweise gibts Requirements bei meiner MSDN nicht... habs aber bei der Online-MSDN gefunden. Also nochmal das Problem: WIN32_FIND_DATA w32fd; char path[93]; HANDLE hFind = FindFirstFile("C:\\*.mp3",&w32fd); if ( hFind != INVALID_HANDLE_VALUE) { do { // hier möchte ich den gesamten Pfad der gefundenen Datei // in die Variable path speichern. } while (FindNextFile(hFind,&w32fd)); } FindClose(hFind); achja: was muss ich ändern dass auch die Unterverzeichnisse durchsucht werden? Zitieren
Klotzkopp Geschrieben 26. Juli 2005 Geschrieben 26. Juli 2005 // hier möchte ich den gesamten Pfad der gefundenen Datei // in die Variable path speichern. strncpy(path, w32fd.cFileName, 92); Du solltest allerdings das letzte Element des Arrays mit '\0' initialisieren, für den Fall, dass 92 Zeichen nicht ausreichen (was sehr leicht passieren kann). achja: was muss ich ändern dass auch die Unterverzeichnisse durchsucht werden?Das geht nicht automatisch. Du musst die Unterverzeichnisse suchen (in WIN32_FIND_DATA::dwFileAttributes ist das Flag FILE_ATTRIBUTE_DIRECTORY gesetzt) und dann in den gefundenen Verzeichnissen nochmal suchen. Zitieren
Dom++ Geschrieben 26. Juli 2005 Autor Geschrieben 26. Juli 2005 ich weiß zwar, wie ich überprüfen kann ob das Flag gesetzt ist oder nicht, aber woher bekomm ich dann die Namen der Unterverzeichnisse her? irgendwie check ich das noch nicht... Zitieren
Klotzkopp Geschrieben 26. Juli 2005 Geschrieben 26. Juli 2005 ich weiß zwar, wie ich überprüfen kann ob das Flag gesetzt ist oder nicht, if((w32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) (Edit: sorry, hatte da ein "nicht" gelesen, wo keines war ) aber woher bekomm ich dann die Namen der Unterverzeichnisse her?Aus cFileName, wie die Dateinamen auch. Du musst nur aufpassen, dass du nicht bei . und .. weitersuchst. Zitieren
Dom++ Geschrieben 9. August 2005 Autor Geschrieben 9. August 2005 Du musst nur aufpassen, dass du nicht bei . und .. weitersuchst. hm und wie mach ich das? so funktionierts auf jeden Fall nicht: :confused: if(w32fd.cFileName != "." && w32fd.cFileName != "..") Zitieren
Klotzkopp Geschrieben 9. August 2005 Geschrieben 9. August 2005 C-Strings (also char-Arrays und char-Zeiger) kann man nicht inhaltlich mit == und != vergleichen. Dabei werden nur die Adressen verglichen. Stichwort strcmp. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.