Eddie88 Geschrieben 8. Januar 2008 Teilen Geschrieben 8. Januar 2008 Hallo, ich habe die Aufgabe ein Porgramm schreiben, welches in einem Verzeichnis, dass möglichst per Abfrage des Benutzers eingegeben wird, nach Dateinamen sucht. Eigentlich nach .jpeg und .jpg. Ich bin noch nicht sehr erfahren und kann auch nur Standard C++. Und selbst das noch nicht mal komplett. Aber es kommt langsam. Ich habe schon gegoogelt und hier die Suchfunktion benutzt. Ganz so klar komme ich aber noch nicht mit. Brauche ich für Findfirstfile die MFC Bibliothek? Oder eine andere? Kann ich das Ergebnis durch einfaches zuweisen in einer Variable speichern? Was ich bisher so an Code gesehen habe, war der Pfad immer im Quellcode miteingegeben. Es muss aber vom Benutzer eingegeben werden. Kann ich dann den ermittelten Pfadnamen auch in einer Variable speichern? Wenn jemand vielleicht auch ein kleines Beispielprogramm schreiben könnte, dann wäre das super. Oder hat vielleicht jemand einen Link mit einer guten Erklärung zu diesem Thema? Aber von Anfang an. Also auch welche Bibliotheken ich benötige. Ich bedanke mich im Vorraus für jede Antwort. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 8. Januar 2008 Teilen Geschrieben 8. Januar 2008 Brauche ich für Findfirstfile die MFC Bibliothek? Oder eine andere? Nein die MFC brauchst du dazu nicht, FindFirstFile ist ganz normale Windows API. Die Beste Anlaufstelle dazu ist immer die MSDN, da findest du die Funktionen genau Dokumentiert und oft auch BEispiele dazu FindFirstFile Function (Windows) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eddie88 Geschrieben 8. Januar 2008 Autor Teilen Geschrieben 8. Januar 2008 Danke für deine schnelle Antwort. Nein die MFC brauchst du dazu nicht, FindFirstFile ist ganz normale Windows API. Die Beste Anlaufstelle dazu ist immer die MSDN, da findest du die Funktionen genau Dokumentiert und oft auch BEispiele dazu FindFirstFile Function (Windows) Die MSDN werde ich mir mal angucken. Bei MSDN habe ich mir CFileFind mit MFC angeschaut aber nicht richtig durchgeblickt. Werds aber hoffentlich bei FindFirstFile. Findest du doch schon wenn du hier nach FindFirstFile suchst Ja das stimmt. Habe ja auch welche gefunden, aber funktioniert haben die bei mir nicht und erklärt wurden die auch nciht ganz vollständig. Und dadurch weiß ich dann auch gar nicht was ich da überhaupt gemacht habe. Hatte gedacht, ich müsste noch irgendwelche Dateien includen. Aber wie du schon sagtest, brauch ich das ja nicht. Der Compiler spuckt bei fast jeder Zeile einen Fehler aus. Es beginnt bei "HANDLE undeclared (first use this function)" und geht bis "FindClose undeclared (first use this function)". Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 8. Januar 2008 Teilen Geschrieben 8. Januar 2008 Hatte gedacht, ich müsste noch irgendwelche Dateien includen. Aber wie du schon sagtest, brauch ich das ja nicht. Das hab ich nicht gesagt. Du musst zumindest mal windows.h includen. Alles weitere steht in der MSDN... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eddie88 Geschrieben 8. Januar 2008 Autor Teilen Geschrieben 8. Januar 2008 Das hab ich nicht gesagt. Du musst zumindest mal windows.h includen. Alles weitere steht in der MSDN... Ach stimmt, tut mir leid. Ich stehe heute wohl irgendwie total auf dem Schlauch. Danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eddie88 Geschrieben 9. Januar 2008 Autor Teilen Geschrieben 9. Januar 2008 Mit Hilfe der MSDN und einem Beispielcode aus dem Forum bin ich jetzt etwas weiter gekommen. Das Programm sucht schon richtig nach dateien. Nur habe ich jetzt 2 Probleme. 1. Ich muss das Verzeichnis, welches durchsucht werden soll, im Quellcode angeben. Das ist aber unvorteilhaft. Besser wäre es wenn ich das dem Benutzer überlassen könnte. Wenn ich jetzt aber beim Aufruf der Funktion FindFirstFile den ersten Übergabeparameter als Variable nehme, dann spuckt der Compiler den Fehler "invalid conversation from 'char' to 'const char'". Das bedeutet also ich brauch eine Konstante, aber wie kann ich das lösen, damit der Benutzer den Pfad eingeben kann? 2. Ich muss die gefundenen Dateinamen irgendwie abspeichern können. Entwerder temporär nur zur Laufzeit oder auch als Datei. Aber wenn ich die Dateinamen versuche in eine Variable zu speichern, dann bekomme ich den Fehler "invalid conversation from 'CHAR*' to 'char'". Was ich auch noch gerne machen würde, aber nicht zwingend notwendig ist, ist das Anzeigen der Verzeichnisse, die sich in dem angegebenen Verzeichnis befinden. Die Abfrage dazu habe ich in eine IF-Anweisung, nur ist in diesem Block kein Code. Wie bekomme ich die Verzeichnisnamen raus? Habe schon in dem struct WIN32_FIND_DATA in der MSDN nachgeschaut, aber nichts dazu gefunden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 9. Januar 2008 Teilen Geschrieben 9. Januar 2008 Wenn ich jetzt aber beim Aufruf der Funktion FindFirstFile den ersten Übergabeparameter als Variable nehme, dann spuckt der Compiler den Fehler "invalid conversation from 'char' to 'const char'". Das bedeutet also ich brauch eine Konstante Du hast die Fehlermeldung falsch oder unvollständig abgeschrieben. Deine Schlussfolgerung ist auch falsch. Zeig mal den Code. Aber wenn ich die Dateinamen versuche in eine Variable zu speichern, dann bekomme ich den Fehler "invalid conversation from 'CHAR*' to 'char'".Auch hier ist die Fehlermeldung wieder falsch/unvollständig. Bitte benutz Copy&Paste. Und auch hier musst du den Code zeigen. Ohne den Code kann man nur sagen, dass du etwas falsch machst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eddie88 Geschrieben 9. Januar 2008 Autor Teilen Geschrieben 9. Januar 2008 Okay Also wenn ich bei FindFirstFile eine Varibale (path) stehen habe, dann zeigt der Compiler für diese Zeile 19 C:\Dev-Cpp\fhandle 1.1.cpp invalid conversion from `char' to `const CHAR*' und 19 C:\Dev-Cpp\fhandle 1.1.cpp initializing argument 1 of `void* FindFirstFileA(const CHAR*, _WIN32_FIND_DATAA*)' an. int main() { HANDLE fHandle; WIN32_FIND_DATA FindFileData; char path; cout<<"Geben Sie das Verzeichnis an: "; cin>>path; fHandle=FindFirstFile(path,&FindFileData); Für das Abspeichern der Namen in einer Variable gibt es nur diesen einen Fehler: 44 C:\Dev-Cpp\fhandle 1.1.cpp invalid conversion from `CHAR*' to `char' . FindNextFile(fHandle,&FindFileData); while (FindNextFile(fHandle,&FindFileData)) { if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { cout<<"\n'Ein Verzeichnis'\n\n"; // Datei ist keine, sondern ein Verzeichnis... } else { //cout<<"Folgende Datei gefunden: "<<FindFileData.cFileName<<"\n"; char list; list=FindFileData.cFileName; cout<<"Folgende Datei gefunden: "<< list <<"\n"; } } FindClose(fHandle); _getch(); return 0; } Könnte man das vielleicht durch Zeiger lösen?:confused: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 9. Januar 2008 Teilen Geschrieben 9. Januar 2008 In eine char-Variable passt genau ein einzelnes Zeichen. Wenn du mit Zeichenketten arbeiten willst, musst du schon char-Arrays benutzen, oder, da du C++ benutzt, am besten gleich std::string. Diese Klasse kümmert sich für dich um die Speicherverwaltung. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eddie88 Geschrieben 9. Januar 2008 Autor Teilen Geschrieben 9. Januar 2008 In eine char-Variable passt genau ein einzelnes Zeichen. Wenn du mit Zeichenketten arbeiten willst, musst du schon char-Arrays benutzen, oder, da du C++ benutzt, am besten gleich std::string. Diese Klasse kümmert sich für dich um die Speicherverwaltung. Hmm, habe es vorhin auch schon mit arrays versucht. Jetzt nochmal, aber ich bekomm sogar die gleichen Fehlermeldungen. Ich habe einfach immer bei der Variable in eckigen Klammern die Anzahl der arrays geschrieben. Das müsste doch reichen, oder? Über string weiß ich nichts. hast du vielleicht einen Link, in dem mir schnell und kurz erklärt wird, wie man damit umgeht? Ansonsten müsste ich in meinen Büchern oder ebooks umständlich danach suchen. Ich gehe zwar meine beiden Bücher nacheinander durch aber so weit bin ich noch nicht. Und da es für die Arbeit ist kann ich damit nicht so lange warten. Weil ich es nämlich für mich privat nicht so hektisch angehe und mir Zeit lasse. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 9. Januar 2008 Teilen Geschrieben 9. Januar 2008 Hmm, habe es vorhin auch schon mit arrays versucht. Jetzt nochmal, aber ich bekomm sogar die gleichen Fehlermeldungen. Ich habe einfach immer bei der Variable in eckigen Klammern die Anzahl der arrays geschrieben. Das müsste doch reichen, oder?Nein. Die eckigen Klammern brauchst du nur bei der Deklaration/Definition des Arrays. Später benutzt du die Klammern dann nur noch, wenn du auf einzelne Elemente des Arrays zugreifen willst. Über string weiß ich nichts. hast du vielleicht einen Link, in dem mir schnell und kurz erklärt wird, wie man damit umgeht?Nein. Aber ich kann deinen Code mal eben passend umstricken: #include <string> using namespace std; int main() { HANDLE fHandle; WIN32_FIND_DATA FindFileData; string path; cout<<"Geben Sie das Verzeichnis an: "; cin>>path; fHandle=FindFirstFile(path.c_str(),&FindFileData); ... FindNextFile(fHandle,&FindFileData); while (FindNextFile(fHandle,&FindFileData)) { if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { cout<<"\n'Ein Verzeichnis'\n\n"; // Datei ist keine, sondern ein Verzeichnis... } else { //cout<<"Folgende Datei gefunden: "<<FindFileData.cFileName<<"\n"; string list; list=FindFileData.cFileName; cout<<"Folgende Datei gefunden: "<< list <<"\n"; } } FindClose(fHandle); _getch(); return 0; }[/code] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eddie88 Geschrieben 10. Januar 2008 Autor Teilen Geschrieben 10. Januar 2008 Oh hey, das ist wirklich sehr nett von dir. Danke. Funktioniert super. Kannst du mir vielleicht noch sagen was es sich mit dem path.c_str() auf sich hat? Weil ich schon verstehen will, was ich dann da habe. Danke noch mal für Eure Hilfe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 10. Januar 2008 Teilen Geschrieben 10. Januar 2008 FindFirstFile erwartet als ersten Parameter einen const char*, und kann mit std::string nichts anfangen. Die Stringklasse bietet allerdings eine Methode an, die einen solchen Zeiger bereitstellen kann, und diese Methode heißt c_str. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Eddie88 Geschrieben 11. Januar 2008 Autor Teilen Geschrieben 11. Januar 2008 Vielen Dank für deine Hilfe und Mühe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.