Dateizugriff in Visual C++



  • Hallo Leute

    mein name ist oliver und ich hätte eine frage bezüglich den datenzugriff in c++. ich und 2 freunde von mir müssen ein programm für eine vorlesung an der tu wien schreiben und wir möchten ein programm schreiben das unser mp3-sortiment sortiert und gegebenfalls auch doppelte mp3's aussortiert.

    dazu müssen wir den namen der mp3-datei lesen und hier fängt es schon an schwierig zu werden. denn ich habe im internet schon befehle gefunden die das machen (opendir, readdir, ..) aber dazu braucht man die dirent.h header datei und die ist bei meinen visual 5.0 nicht dabei. deshalb habe ich mir visual 2005 express downgeloadet, aber da ist auch keine dirent.h-datei dabei. da ist nur die direct.h, die macht zwar laut beschreibung das selbe oder was ähnliches aber dazu bräuchte man wieder andere befehle (mkdir, rmdir, chdir...) aber ich habe keinen befehl gefunden der den dateinamen liest. die befehle wie mkdir sind zwar auch sehr nützlich wenn es dann darum geht das man die mp3s ordnet und ordner mit der bezeichnung "a" bis "z" erstellen muss, aber wir sind noch am anfang.

    wisst ihr auch sonst noch irgentwelche befehle die uns von nützen sein könnten. denn auf der msdn-homepage (http://msdn2.microsoft.com) findet man zwar die verschiedensten befehle, aber ich überblicke das chaos nicht mehr wenn hunderte befehle in einer liste sind und keiner der namen mir etwas sagt. (http://msdn2.microsoft.com/en-us/library/ms235420(vs.80).aspx)

    oder wisst ihr woher wir die dirent.h datei bekommen?

    noch etwas allgemeines zu unserem programm.

    geplant wäre dass man dem programm den pfad zu dem ordner gibt, in denen sich die unsortierten mp3s befinden und einen neuen pfad, wo die mp3s geordnet abgelegt werden sollen. das programm generiert dann ordner von a bis z und weitere unterordner mit den namen der bands. nebenbei erstell es eine liste mit allen mp3s die man besitzt und deren pfad. erst wenn das sortieren beendet ist kann der benutzer entscheiden ob der alte mp3-ordner gelöscht werden soll. weiters kann er erst nach dem sortieren entscheiden ob nach doppelten mp3s gesucht werden soll. und vorallem auch wie gesucht werden soll. z.b.: total gleiche dateinamen under nur ähnliche namen, die sich nur duch ein oder zwei buchstaben unterscheiden (tippfehler). oder ob auch die dateigröße gleich sein muss usw. danach erstellt es eine liste mit allen doppelten mp3s und deren pfad, sodass der benutzer bei allen doppelten selbst entscheiden kann ob eine davon gelöscht werden soll. eventuell erstellt es danach wieder eine liste mit den aktuell vorhandenen mp3s ohne die doppelten.

    bis jetzt haben wir herausgefunden, wie man eine txt-datei erzeugt und beschreibt, wie man namen in einem feld sortiert (bubblesort), wie man die dateigröße herausfindet, wie man ordner erzeugt und wie man den aktuellen pfad in dem man sich gerade befindet anzeigt. tendenz steigend 🙂

    wir bitten um eure hilfe.

    mfg oliver lang



  • Wenn Du VC2005 hast und native Code schreiben willst (also kein .NET/Windows-Forms) dann sind die Fragen im WinAPI-Forum besser aufgehoben.

    Wenn Du native Code mit VC2005 schreiben willst, so brauchst Du noch das PSDK von Microsoft. Siehe:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-143003.html

    Dann kannst Du alle WinAPI-Befehle verwenden. Zum Suchen der Dateien würde ich z.B. FindFirstFile/FindNextFile (oder _findfirst, _findnext) verwenden.
    Und für die CRT-Funktionen _findfirst/next benötigt man kein "dirent.h" sondern "io.h" und das ist dabei (auch ohne PSDK).

    Meistens hilft es ungemein, wenn man in die Doku schaut:
    http://msdn2.microsoft.com/en-us/library/zyzxfzac(VS.80).aspx



  • Hallo,

    vor dem Problem stand ich auch vor kurzem noch. War bei mir allerdings privates Interesse. Ich hatte erst ein Konsolenprogramm genutzt, welches allerdings tatsächlich auf dirent.h zugriff. Da ich dafür aber eine einfache GUI mittels MFC bauen wollte, viel dieser Weg schonmal aus (dirent.h ist ein UNIX Header).

    Ich habe es dann letztendlich mit den Befehlen FindFirstFile und FindNextFile hinbekommen. Hat mir zwar auch ein paar Haare gekostet, aber mitlerweile läuft es 🙂



  • http://www.c-plusplus.net/forum/viewtopic-var-t-is-172937-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-findfirstfile-and-start-is-50.html
    Mit der ersten Funktion geht ihr durch alle Subdirectories und könnt dort etwas bewirken (anstelle "m_lNumFiles++;".


Anmelden zum Antworten