FindFirstFile-Verzeichnisangabe per Eingabe



  • Spyro schrieb:

    wär ne kurze einweisung zu viel verlangt!?

    Ne, is nicht zu viel verlangt. Also, ein char ist in Win32 ein Byte. Ein char-Pointer zeigt also auf ein Byte im Speicher. So, und in ein Byte passen 256 Zeichen (ASCII-Code). Das heißt, du kannst eine Zeichenkette in einem char-Array speichern. Das geht so in WinAPI:

    TCHAR szMyChar[50];
    

    Damit reservierst du Speicher für 50 Zeichen, also 50 Bytes - je nachdem: Wenn UNICODE definiert ist, sind's 50 WORDs, also 100 Bytes. szMyChar ist nun ein TCHAR-Pointer. In WinAPI gibts dafür nen Typedef: LPCTSTR (konstant) oder LPTSTR. Schreiben kannst du in den Array in der Definition:

    TCHAR szMyChar[50] = TEXT("HALLO");
    

    oder per

    wsprintf(szMyChar, TEXT("HALLO"));
    

    oder so:

    lstrcpy(szMyChar, TEXT("HALLO"));
    

    Das dürfte für's erste genügen.

    Ach ja: cout und cin kannst du auch mit char-Pointern verwenden.



  • 1.) Wenn du den Pfad einliest brauchst du kein \\ eingeben - das musst du nur innerhalb von Strings im Quellcode machen, da dort ein \ den Beginn einer Escape-Sequenz anzeigt 😉

    2.) Versuch es mal mit FindFirstFile(path.c_str,&wfd); 🙂



  • also ich schätz eure hilfe wirklich sehr, ich bekomm es trotzdem nicht hin 😞 sry

    ich hab jetzt:

    string path;
    

    definiert und dann mit

    cin >> path;
    

    den string eingelesen. soweit is ja alles in ordnung 🙂

    so... jetzt hab ich flenders lösung versucht. d.h.

    fHandle = FindFirstFile(path.c_str,&wfd);
    

    ich hoffe mal ich hab des soweit richtig verstanden 🙂

    jetzt bekomm ich vom Compiler folgenden Fehler:

    --------------------Konfiguration: muh - Win32 Debug--------------------
    Kompilierung läuft...
    muh.cpp
    D:\Programme\Microsoft Visual Studio\MyProjects\muh\muh.cpp(23) : error C2664: 'FindFirstFileA' : Konvertierung des Parameters 1 von 'const char *(void) const' in 'const char *' nicht moeglich
    Es gibt keinen Kontext, in dem diese Konvertierung moeglich ist
    Fehler beim Ausführen von cl.exe.

    des heißt doch, dass er den string in "path" nicht an FindFirstFile übergeben kann, oda ?

    wenn ich WebFritzi´s lösung benutzte, d.h.

    TCHAR path[50];
    

    definiere und danach gleiche vorgehensweise wie oben, bekomme ich folgende fehlermeldung:

    --------------------Konfiguration: muh - Win32 Debug--------------------
    Kompilierung läuft...
    muh.cpp
    D:\Programme\Microsoft Visual Studio\MyProjects\muh\muh.cpp(23) : error C2228: Der linke Teil von '.c_str' muss eine Klasse/Struktur/Union sein
    Fehler beim Ausführen von cl.exe.

    damit kann ich leider überhaupt nichts anfangen !
    (ganz schön anstrengend, so n kleines programm 😃 *schleim* :p )



  • OK.

    int main()
    {
    
    	HANDLE fHandle;
    	WIN32_FIND_DATA wfd;
    	TCHAR Dateiname[MAX_PATH];
    	TCHAR path[MAX_PATH];
    
    	cout << "Bitte geben sei das Verzeichniss an, welches bereinigt werden soll." <<endl;
    	cout << "\" \\ \" bitte duch \" \\\\ \" ersetzten." << endl;
    
    	cin >> path;
    	cout << endl;
    
    	fHandle = FindFirstFile(TEXT("c:\\*"), &wfd);
    
    	Dateiname = wfd.cFileName;
    
    	cout << Dateiname << endl;
    
    	while( FindNextFile(fHandle, &wfd) )
    	{
    
    	FindNextFile(fHandle, &wfd);
    
    	Dateiname = wfd.cFileName;
    
    	cout << Dateiname << endl;
    
    	}
    
    	FindClose(fHandle);
    
    	return 0;
    }
    

    So müsste er jedenfalls ordentlich kompilieren. 😉



  • cout << "\" \\ \" bitte duch \" \\\ \" ersetzten." << endl;

    das ist quatsch. das brauch man nicht.



  • TCHAR Dateiname[MAX_PATH];
    

    noch durch

    string path;
    

    ersetzten dann geht es 🙂

    aber ich hab mich oben wohl nicht genau ausgedrückt, sry.
    ich will der mit der Eingabe

    cin >> path;
    

    einen beliebigen Pfad eingeben können, der dann nacher an FindFirstFile übergeben wird, sodass nacher in FindFirstFile(path,&wfd) mein eingegebenes Verzeichniss steht, des ich oben in

    cin >> path;
    

    eingegeben habe. hoffe jetzt ist es verständlich, was ich versuchen will 🙂
    hmm.. scho wieder verzwickt... ich will einfach den Pfad von FindFirstFile selbst bestimmen können mit der eingabe von cin in path.
    wiedermal schwer zu erklären 😃

    @ :.

    1.) Wenn du den Pfad einliest brauchst du kein \\ eingeben - das musst du nur innerhalb von Strings im Quellcode machen, da dort ein \ den Beginn einer Escape-Sequenz anzeigt

    hat flenders schon gesagt 😉



  • Du musst bei WebFritzis Code nur noch bei FindFirstFile das TEXT("c:\*") durch path ersetzen 😉



  • um genau zu sein 😉

    fHandle = FindFirstFile(path.c_str(), &wfd);
    


  • Dann war ich ja schon nahe dran - nur die Klammern hatte ich vergessen (das kommt davon, wenn man so selten programmiert - und dazu kaum C++) 🤡

    Bei WebFritzis Code wird der Pfad aber direkt in ein char-Array eingelesen 😉



  • 🙂 danke an alle dir mir geholfen haben.
    hab mich für die lösung entschieden:

    FindFirstFile(path.c_str(),&wfd);
    

    hab path noch als string path definiert 🙂

    thx a lot Spyro


Anmelden zum Antworten