Probleme mit GetFullPath
-
Hallo Zusammen ich habe die Aufgabe ein Programm zu schreiben, bei dem die 10 größten Dateien aus einem Verzeichnis/ Verzeichnisbeum ngezeigt werden sollen.
Nun habe ich jedoch ein Problem mit der GetFullPath Funktion. Diese Funktion liefert mir immer den Pfad indem das Programm gerade läuft und nicht den Pfad der gerade gefundenen Datei.Hier ist einmal mein Programm code:
int listen(char *directory) { WIN32_FIND_DATA FData; HANDLE hSearch = FindFirstFile(directory,&FData); BOOL MoreFiles = FALSE; int cnt_dir = 0, cnt_file = 0; //TCHAR *szFileName; DWORD dwRet; DWORD bufferLen = 0; TCHAR *buffer = new TCHAR[bufferLen]; TCHAR *filePart; if (hSearch == INVALID_HANDLE_VALUE) { return -1; } do { if (!( (FData.cFileName[0]=='.') && ( (FData.cFileName[1]=='.' && FData.cFileName[2]==0) || FData.cFileName[1]==0 ) )) { // Ist das ein Ordner ? if(FData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) { // Den Ordnernamen ausgeben cout<<"(Ordner) "<<FData.cFileName<<endl; bufferLen = GetFullPathName(FData.cFileName, bufferLen, buffer, &filePart); delete [] buffer; if (bufferLen > 0) { buffer = new TCHAR[bufferLen+1]; dwRet = GetFullPathName(FData.cFileName, bufferLen+1, buffer, &filePart); if (dwRet <= bufferLen) { // succeeded: _tprintf(_T("FullName: %s\n"), buffer); listen(buffer); } } cnt_dir++; // Ordnerzähler um 1 erhöhen } // Wenn nicht else { // Den Dateinamen ausgeben cout<<"(Datei)"<<FData.cFileName<<endl; } } }while (FindNextFile(hSearch,&FData)); FindClose(hSearch); cin.get(); } int main(int argc, char *argv[]) { listen("C:\\*.*"); getchar(); return 0; }
-
Wenn es Dir nur um den absoluten Pfad zur gerade gefundenen Datei geht, kannst Du Dir den doch zusammenbasteln. Die Funktion wird doch mit nem Pfad aufgeruden, also:
[Pfad ohne Suchspezifikation] + [] + [Dateiname] = [absoluter Pfad]
.Vllt ist das noch interessant
:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-168044-and-highlight-is-*rekursiv*.html
(Ich meine die Funktion 'ScanFoldersForFiles' weiter unten.)
-
Das mit dem Zusammenbauen habe ich auch schon probiert, aber irgendwie klappt das nicht. Habe es mal mit StrCat versucht. Hast du noch ne andere Idee? Ich muss ja auch mit dem Zusammengesetzten Pfad in den Unterverzeichnissen weiter suchen.
-
Hast Du Dir den Link überhaupt angeguckt (oder bist Du auf C angewiesen) ?
-
Ich plädiere: Macht CodeFinder endlich zum Moderator, bitte! Ohne CodeFinder ist einfach nichts los im WinAPI Forum.
-
Ja habe ich mir durchgelesen. Aber ich soll die API Funktionen für Dateioperationen nutzen. Das ist die Vorgabe unseres Lehrers. Von daher wäre mir das so wie ich es vor hatte lieber. Ich müsste halt nur den Pfad zusammensetzen. Aber mit StrCat gehts nicht. Oder haste noch ne Idee?
-
SqaureOne schrieb:
Aber ich soll die API Funktionen für Dateioperationen nutzen.
lol, das hab ich doch
. Hier wird bei mir gebastelt:// ... strSearchArg = strSrc + cString(win32FinData.cFileName); strSearchArg.append(cString(STRING("\\*")), 0, 3); // ...
-
Ok, ich habe es nun eingebaut und bekomme Compilerfehler:
Aufruf der Undefinierten Funktion 'cString'
append ist kein Element von Ansi String
Aufruf der undefinierten Funktion 'String'#include <vcl.h> #include<String> #include<Windows.h> #pragma hdrstop using namespace std;
-
Was programmiert ihr denn (WinAPI oder VCL)?
Mit den VCL-Funktionen ist es doch dann einfacher, da diese direkt mit dem Datentyp AnsiString zusammenarbeiten.Oder aber du verwendest direkt die Datentypen der Standard-C++ Bibliothek: std::string.
-
Wir sollen die API Fumktionen nutzen. Wir programmieren mit dem Borland Builder 6
-
Ließ Dir endlich den verlinkten Post durch...
-
Ich habe mir den Link angeschaut. Habe nun noch
#ifndef UNICODE typedef char CSTRG; typedef char* PCSTRG; typedef const char* CPCSTRG; #else typedef wchar_t CSTRG; typedef wchar_t* PCSTRG; typedef const wchar_t* CPCSTRG; #endif // !UNICODEeingebaut aber immer noch die zuvor erwähnten Fehler. Kannst du mir nicht nochmal einen kleinen Tipp geben?
Wäre super nett Danke!!!
-
Hm, steht eigentlich auch in dem Thread:
#ifdef UNICODE typedef std::wstring cString; // ... #else typedef std::string cString; // ... #endif // UNICODE