Ordnergröße mithilfe von stat und st_size ermitteln



  • Ich hab den Code so umgeschrieben, dass man per Pfad bestimmen kann, was man will:

    #include <stdio.h>
    #include <sys\stat.h>
    #include <windows.h>
    
    int main(int argc, char *argv[])
    	{
    		char hallo[] = "C:\\Users\\MeinNam\\Desktop\\test";
    		struct stat status;
    		off_t size_total = 0;
    
    		for (argv+=!!(argc-1); *argv; ++argv) {
    		if (stat (hallo, &status) == -1) {
    			perror("Fehler bei stat");
    			return EXIT_FAILURE;
    		}
    		printf ("Größe von %s: %ld Bytes\n", hallo, status.st_size);
    		size_total += status.st_size;
    		}
    		if (argc > 1)
    		printf ("Größe aller angegebenen Dateien: %ld Bytes = %ld KiB\n",
    			size_total, size_total/1024);
    
    		return 0;
    	}
    

    Soweit so gut.
    Ich kompiliere das Programm, geht auch alles. Wenn ich es dann ausführe, dann steht: "0 Bytes" obwohl ich etwas drinnen habe was ca. 10MB sind.
    Ich erwarte mir, dass ich die größe des Ordners erfahre.

    Hoffe du verstehst mein Problem jetzt 🙂


  • Mod

    halotolos schrieb:

    Soweit so gut.
    Ich kompiliere das Programm, geht auch alles. Wenn ich es dann ausführe, dann steht: "0 Bytes" obwohl ich etwas drinnen habe was ca. 10MB sind.
    Ich erwarte mir, dass ich die größe des Ordners erfahre.

    Hoffe du verstehst mein Problem jetzt 🙂

    Dann habe ich dich schon gleich zu Anfang verstanden und deine Frage beantwortet:

    SeppJ schrieb:

    Du hast einfach eine falsche Vorstellung davon, was stat tut. Es zählt nicht Dateien im Ordner, sondern gibt Informationen über den Ordner selbst. Und dessen Größe ist in der Regel 4 kB (bei üblichen Dateisystemen).

    Analogie für C-Programmierer:

    int *foo = malloc(100);
    sizof(foo);  // Größe des Pointers, nicht 100.
    

    Warum antwortest du auf diese Erklärung

    halotolos schrieb:

    Ich will auch keine Dateien zählen,

    😕

    P.S.: Auf Windows ist die Größe eines Ordners anscheinend 0, aber das ändert auch nichts an der Erklärung.



  • Na, da hab ich micht verschrieben.

    Aber ich versteh nicht, wie mir deine Lösung eine Hilfe sein kann.



  • Du wirst wohl die Größe aller enthaltenen Dateien rekursiv bestimmen und addieren müssen.



  • Aber genau das ist ja das Problem. Ich weiß nicht wie die Dateien heißen.
    Ich habe bereits ein Programm geschrieben, mit dem ich den Inhalt eines Ordners kopieren kann. Mit der Funktion access() kann man nur überprüfen ob ein Ordner existiert, aber nicht ob etwas im Ordner ist. Deshalb möchte ich die größe des Ordners herausfinden und somit bestimmen, ob es kopiert und ein neuer Ordner erstellt werden soll, in dem die Dateien hineinkommen.
    Wenn es jedoch noch eine andere Möglichkeit gibt das so zu regeln wäre wirklich hilfreich 🙂


  • Mod

    dirent.h



  • Hat leider nichts gebracht.



  • halotolos schrieb:

    Hat leider nichts gebracht.

    Hast du die Funktionen aus dirent.h schon früher mal ausprobiert, so dass du in 3 Minuten zu dieser Erkenntnis kommst?



  • DirkB schrieb:

    halotolos schrieb:

    Hat leider nichts gebracht.

    Hast du die Funktionen aus dirent.h schon früher mal ausprobiert, so dass du in 3 Minuten zu dieser Erkenntnis kommst?

    Nein, ich hab sie einfach eingebunden. Ich dachte da er nichts dazu geschrieben hat, muss ich sie einfach einbinden und es geht.



  • halotolos schrieb:

    Nein, ich hab sie einfach eingebunden. Ich dachte da er nichts dazu geschrieben hat, muss ich sie einfach einbinden und es geht.

    🙄
    Dann lies dir die man-Page / Dokumentation zu dirent durch.



  • DirkB schrieb:

    🙄
    Dann lies dir die man-Page / Dokumentation zu dirent durch.

    Das ist zur Verzeichnisverwaltung nötig, aber was hilft mir das mit meinem Problem? Ich möchte nur die größe eines Ordners herausfinden, mehr nicht.



  • halotolos schrieb:

    Das ist zur Verzeichnisverwaltung nötig, aber was hilft mir das mit meinem Problem? Ich möchte nur die größe eines Ordners herausfinden, mehr nicht.

    Bashar schrieb:

    Du wirst wohl die Größe aller enthaltenen Dateien rekursiv bestimmen und addieren müssen.



  • halotolos schrieb:

    Das ist zur Verzeichnisverwaltung nötig, aber was hilft mir das mit meinem Problem? Ich möchte nur die größe eines Ordners herausfinden, mehr nicht.

    Dein Problem ist, herauszufinden, ob sich in dem Ordner Dateien befinden, oder nicht? Hast du jedenfalls oben gesagt.

    Abgesehen davon: Ich hatte dir den Tipp gegeben, alle Dateien in dem Ordner zu durchlaufen und ihre Größen zu addieren, daraufhin du:

    Ich weiß nicht wie die Dateien heißen.

    Jetzt liefert dir jemand eine Möglichkeit, die Namen dieser Dateien zu ermitteln, und es ist dir auch wieder nicht recht. 😕



  • Achso.. Jetzt hab ich den Sinn verstanden.
    Vielen Dank für eure große Hilfe und Geduld. 🙂


Anmelden zum Antworten