FindFirstFile-Verzeichnisangabe per Eingabe
-
--------------------Konfiguration: muh - Win32 Debug--------------------
Kompilierung läuft...
muh.cpp
D:\Programme\Microsoft Visual Studio\MyProjects\muh\muh.cpp(23) : error C2040: 'verzeichnis' : 'const char *' unterscheidet sich von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in bezug auf die Anzahl vo
rgenommener Dereferenzierungen
D:\Programme\Microsoft Visual Studio\MyProjects\muh\muh.cpp(23) : error C2440: 'initializing' : 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' kann nicht in 'const char *' konvertiert werden
Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
Fehler beim Ausführen von cl.exe.muh.obj - 2 Fehler, 0 Warnung(en)
diese fehler bekomm ich dann. string is bei mir == std::string. hab using namespace std; drinne stehen, nur nicht im code oben mitgepostet.
bzgl. char-pointer muss ich zugeben hab ich damit noch nicht gearbeitet.
wär ne kurze einweisung zu viel verlangt !? wenn nich schau ich dass ich des irgendwo anders herbekomme, des dürfte kein problem sein

oder ein einfaches beispiel dürfte es auch tun denke ich...thx to WebFritzi
-
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
sryich 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 Eingabecin >> 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