Problem beim auflisten von Ordnerinhalten
-
Theseus schrieb:
Ich würde gern alle Dateien in einem Ordner finden und den Inhalt jeder Datei in einen Buffer schreiben.
Wenn du dir FileName richtig zusammensetzt, dann sollte das eigentlich gehen - oder was macht der Code bei dir?
char slash[2] = "\\"; // ... char FileName[200]; lstrcpy(FileName, Directory); lstrcat(FileName, slash); lstrcat(FileName, FindData.cFileName);zu deinem bisherigen doppelslash: "//" ist 3 Zeichen lang (2 x / und ein NULL-Zeichen am String-Ende), was du aber brauchst ist ein \
Da ein \ aber eine Escape-Sequenz einleitet musst du den \ selbst auch escapen als \\ (hier besteht der Sting dann nachher aus einem \ und dem NULL-Zeichen am Ende)
-
Und ehrlich gesagt, der Code den du gefunden und abgeändert hast, hättest du gar nicht verändern müssen... Da wird einfach jede Datei aus dem Verzeichnis "C:\IrgendeinOrdner" in den Speicher gelesen, also recht genau das, was du willst
Hättest nur "C:\\IrgendeinOrdner" durch "I:\\Neuer Ordner" ersetzen müssen 
Original (war sogar von mir :D):
Badestrand schrieb:
std::string Directory = "C:\\IrgendeinOrdner"; std::string WildcardPath = Directory + "\\*.*"; WIN32_FIND_DATA FindData; HANDLE hFind = FindFirstFile( WildcardPath, &FindData ); do { // Wir wollen ja keine Ordner, sondern nur Dateien if ( ! ( FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) ) { // Datei auslesen (nur bis 4 GB, aber alles andere würde ja deinen Upload sprengen^^) std::string FileName = Directory + "\\" + FindData.cFileName; HANDLE hFile = CreateFile( FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if ( hFile != INVALID_HANDLE_VALUE ) { DWORD FileSize = FindData.nFileSizeLow; char* pFileContent = new char [ FileSize ]; DWORD BytesRead; ReadFile( hFile, pFileContent, FileSize, &BytesRead, NULL ); // Datei versenden... delete [] pFileContent; CloseHandle( hFile ); } } } while ( FindNextFile( hFind, &FindData ); FindClose( hFind );
-
Hm weiß ja nit, obs wichtig ist, aber...wie siehts mit UNICODE aus ?
-
erstmal danke an Badestrand.
Ja, er findet die Dateien alles passt aber die Codierung ist wirklich sehr komisch, aufjedenfall wird nicht der Dateiname angezeit wegen falsch Umwandlung vermutlich kA
ich krieg so komische Zeichen vorliegen
-
In dem Post stand auch drin, dass der Code nicht getestet ist, aber das Prinzip solltest du verstehen, darum geht schließlich...
-
Ah sry mit Codierung meine ich nur die Namen der Datei, nicht deinen Code.
(falls du dachtest ich lästere über deinen Bsp-Source
)
Ich krieg zb nur so Vierecke und strange Zeichen
-
hmm ich poste mal was mir bei allen Dateien als Dateiname angezeigt wird:
|¬þ
-
Keiner ne Idee wie ich das in was lesbares umwandeln könnte?

-
Hast du mal überprüft, ob FindFirstFile ein valides Handle zurückgibt? Oder schmeißt du Unicode und MultiChar durcheinander? Zeig mal deinen Code (wenns nicht ge-copy-pastet ist)...
-
Hi,
hier mal der Code:
#include <windows.h> #include <stdio.h> char Directory[200] = "I"; int files(void) { HANDLE fHandle; WIN32_FIND_DATA wfd; char a[10]; char b[300]; char DoppelSlash[3]=":\\"; char Doks[200]="Dokumente und Einstellungen\\"; char Username[200]="Muhammed.NONE-GIH0BS3O7L"; char Path[200]="\\Eigene Dateien\\Meine empfangenen Dateien\\mahba893707897003\\Verlauf\\"; unsigned long int c=200; GetWindowsDirectory(a,11); //GetUserName(Username,&c); b[0]=a[0]; lstrcat(b,DoppelSlash); lstrcat(b,Doks); lstrcat(b,Username); lstrcat(b,Path); FILE *file; file=fopen("test.txt","w+"); fprintf(file,"%s\n\n",b); fHandle=FindFirstFile(b,&wfd); do { if (!( (wfd.cFileName[0]=='.') && ( (wfd.cFileName[1]=='.' && wfd.cFileName[2]==0) || wfd.cFileName[1]==0 ) )) { if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { fprintf(file,"%s\n",wfd.cFileName); Sleep(1000); } else { fprintf(file,"%s\n",wfd.cFileName); Sleep(1000); } } (FindNextFile(fHandle,&wfd)); } while (1); FindClose(fHandle); fclose (file); return 0; }
-
Ich nehm mal an dass es was mit der Formatierung ("%s") zutun hat oder ich das zuerst umwandeln muss aba da bin ich überfragt.
-
1. Mach mal nach
b[0]=a[0];
noch ein
b[1] = 0;2. Gib mal vor FindFirstFile mit MessageBox(0,b,0,0); b aus.
3. Prüf auch, ob fHandle != INVALID_HANDLE_VALUE ist.
4. Warum hast du eine do ... while(1)-Schleife und keine do ... while (FindNextFile(...))-Schleife?
-
Hallo,
k das mit b[1] hab ich gemacht,
mir wird einfach der zusammengesetzte Pfad (der richtig ist) ausgegeben.fHandle ist gültig
MFG
-
danke->SOLVED
-
Theseus schrieb:
danke->SOLVED
Woran lags denn?
-
Ich weiss es nicht GENAU aber ich denke ich hab beim Pfad am Schluss (beim "\")
kein "*" hinzugefügt