Ordner durchsuchen und .jpg Groesse feststellen
-
Danke erstmal für deine Antwort!
Mein Code sieht zurzeit so aus:
using namespace std; HANDLE hSearch; WIN32_FIND_DATA fData; int main() { if (hSearch = FindFirstFile("*.jpg",&fData)) { do { size_t fsize = ifstream(fData.cFileName).seekg(0, ios_base::end).tellg(); if (fsize == 41020) { cout<<"okay!"; } else { cout<<"Error!"; } } while (FindNextFile(hSearch,&fData)); FindClose(hSearch); } return 0; }Ich kriege aber Errors, was daran ist falsch?
Errors sind folgende:
error C2228: left of '.seekg' must have class/struct/union type
error C2228: left of '.tellg' must have class/struct/union type
-
#include <fstream>vielleicht vergessen?
-
Jap danke.. Dachte es liegt vllt. daran wie er das du ifstream übergibt.
Aber lag nur an dem kleinen Fehler. Danke dir!
-
Wenn ich nun einen Ordner nach den .jpg durchsuchen möchte, klappt das nicht, nur warum nicht?
if (hSearch = FindFirstFile("ORDNER\\*.jpg",&fData))Kann mir da evtl. jemand helfen?
-
wahrscheinlich wird deine Pfadangabe ungültig sein. Bedenke, dass dein Programm ein akteulles Verzeichniss hat in dem es werkelt. Pfadangaben wie dein Beispiel sind relativ, und beziehen sich auf dieses Arbeitsverzeichnis. Mit
GetCurrentDirectory(DWORD nBufferLength, LPTSTR lpBuffer)kannst du das aktuelle Verzeichnis auslesen.
-
1. ifstream ist völlig überflüssig, da die Größe bereits in fData.nFileSizeLow steht.
2. FindFirstFile liefert bei einem Fehler INVALID_HANDLE_VALUE zurück, daher darf hSearch nicht auf TRUE geprüft werden.
3. Der Ordner muss mit vollem Pfad angegeben werden, ansonsten bezieht sich FindFirstFile auf das aktuelle Arbeitsverzeichnis.
-
Danke für deine Antwort!
sri schrieb:
3. Der Ordner muss mit vollem Pfad angegeben werden, ansonsten bezieht sich FindFirstFile auf das aktuelle Arbeitsverzeichnis.
Es soll sich ja aufs aktuelle Arbeitsverzeichnis beziehen, nur eben noch auf einen Ordner der in dem Arbeitsverzeichnis ist.
-
maybe helps,
DWORD GetDirectoryFilesizes() { HANDLE fHandle; WIN32_FIND_DATA wfd; DWORD FilesSizes=0; fHandle = FindFirstFile("c:\...\...\*.jpg",&wfd); if(INVALID_HANDLE_VALUE != fHandle) { do { if (!( (wfd.cFileName[0]=='.') && ( (wfd.cFileName[1]=='.' && wfd.cFileName[2]==0) || wfd.cFileName[1]==0 ) )) { if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // folders } else { FilesSizes+=(wfd.nFileSizeHigh * (MAXDWORD+1)) + wfd.nFileSizeLow;// sum filesizes } } } while (FindNextFile(fHandle,&wfd)); FindClose(fHandle); } return FilesSizes; }
-
[b]DWORD[/b] FilesSizes=0; ... ... FilesSizes+=(wfd.nFileSizeHigh * (MAXDWORD+1)) + wfd.nFileSizeLow;// sum filesizesrofl!
-
Johnny Z. schrieb:
Danke für deine Antwort!
sri schrieb:
3. Der Ordner muss mit vollem Pfad angegeben werden, ansonsten bezieht sich FindFirstFile auf das aktuelle Arbeitsverzeichnis.
Es soll sich ja aufs aktuelle Arbeitsverzeichnis beziehen, nur eben noch auf einen Ordner der in dem Arbeitsverzeichnis ist.
Dann solltest Du Dir das aktuelle Arbeitsverzeichnis mit GetCurrentDirectory holen und daran dann die relative Pfadangabe anfügen (wie Halbleiter es schon schrieb).