Dateien hintereinander dursuchen ?
-
Hmm ich hab diese Funktion gefunden versteh jetzt nicht genau wie sie Funktioniert...
#include <windows.h> #include <tchar.h> #include <stdio.h> #include <iostream> using namespace std; int main(int argc, TCHAR *argv[]) { WIN32_FIND_DATA FindFileData; HANDLE hFind; while(argv[1]!="hallo") { hFind = FindFirstFile(argv[i], &FindFileData); } cout<<"Data not found !\n"; }
Tut der jetzt schon dursuchen und wo faengt er an ?
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x, bzw. C++11) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
ohne irgendwas davon angeguckt zu haben:
while(argv[1]!="hallo")
das willst du nicht.
-
Wenn du mit der WinAPI arbeiten möchtest, dann fang noch einmal bei den absoluten Grundlagen von C an.
Alternativ: Jeweils stl-Container (für argv) und std::strings (für alles andere) nutzen. Wobei der Code auch logisch falsch ist.
-
Hmm ich bin zu 90% auf Linux unterwegs ...
Was hab ich den jetzt genau falsch gemacht das mit dem
Hallo sollte einfach ein Name für eine Datei sein.
-
AirTrake schrieb:
Hallo,
ich habe oft schon in Programme nach etwas gesuchen, ...Aber offensichtlich noch nie mit C.
argv[1]!="hallo")
Was du mit einiger Sicherheit hier vorhast wuerde ein strcmp(...)
erfordern.PS: Unter Linux läuft wäre es das gleiche.
Und wo ein FindFirstFile() ist muesste es auch FindNextFile() geben
-
merano schrieb:
Und wo ein FindFirstFile() ist muesste es auch FindNextFile() geben
.. und auch ein FindClose
-
Hmm wieso sollte ich am bestenmit WinApi anfangen ?
Hab noch nichts mit Winapi gemacht!
-
Hallo, ich glaub du suchst sowas:
#include <windows.h> #include <iostream> using namespace std; int main(int argc, TCHAR *argv[]) { WIN32_FIND_DATA data; HANDLE hFind; LPCTSTR FileName="*" ; // "." <-- damit sieht man in welchem ordner man ist bool ret; // "*" <-- listet alle dateien im ordner auf if (argc <= 1 ) { cout<<"Es wurde kein Parameter uebergeben"<<endl; system("PAUSE"); return 0; } hFind = FindFirstFile( FileName , &data); cout<< data.cFileName << endl; do { ret = FindNextFile( hFind, &data); cout<<data.cFileName<<endl; if ( ! strcmp(data.cFileName, argv[1] ) ) { cout<<"Gesuchte Datei gefunden =)"<<endl; system("PAUSE"); } } while ( ret != 0 ); FindClose(hFind); system("PAUSE"); }
-
x86 schrieb:
Hallo, ich glaub du suchst sowas:
#include <windows.h> #include <iostream> using namespace std; int main(int argc, TCHAR *argv[]) { WIN32_FIND_DATA data; HANDLE hFind; LPCTSTR FileName="*" ; // "." <-- damit sieht man in welchem ordner man ist bool ret; // "*" <-- listet alle dateien im ordner auf if (argc <= 1 ) { cout<<"Es wurde kein Parameter uebergeben"<<endl; system("PAUSE"); return 0; } hFind = FindFirstFile( FileName , &data); cout<< data.cFileName << endl; do { ret = FindNextFile( hFind, &data); cout<<data.cFileName<<endl; if ( ! strcmp(data.cFileName, argv[1] ) ) { cout<<"Gesuchte Datei gefunden =)"<<endl; system("PAUSE"); } } while ( ret != 0 ); FindClose(hFind); system("PAUSE"); }
Das funktioniert so nicht richtig.
1. Der Returnwert von FindFirstFile() wird nicht geprüft. Das führt zu dem
Versuch, einen Dateinamen auszugeben und unnötigem Eintritt in die folgende
Schleife, wenn nichts gefunden wurde; andernfalls fehlt der Vergleich auf
die gesuchte Datei.
2. Der Returnwert von FindNextFile() wird zu spät geprüft. Das führt immer im
letzten Durchlauf des Schleifenkörpers zu einer unnötigen Ausgabe eines
Dateinamens sowie zu einem unnötigen Vergleich auf die gesuchte Datei.