Größe von Datei bestimmen!



  • Hi Leute,

    ich schreibe gerade ein "Dateiübertragungsprogramm" mit dem ich beliebige Dateien von einem PC auf einen anderen übertragen kann.

    Allerdings benötige ich dazu die Größe einer Datei.

    filelenght(file) liefert nur einen long zurück.

    Wie kann ich jetzt die Größe einer Datei auslesen, die z.B. 8 GB groß ist.

    Dazu benötige ich ja einen long long.

    Ich ich den Rückgabewert der Funktion filelenght() ändern oder?

    Und mit GetFileSize() oder FindFirstFile() weiß ich nicht so recht, wie es geht!

    Kann mir einer helfen?



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Es gibt _filelengthi64, aber auch nur unter Windows!
    GetFileSize hat ein sehr ähnliches Problem wie filelength, da du hier auf DWORD beschränkt ist. Besser wäre es GetFileSizeEx zu verwenden (LARGE_INTEGER - 64-bit signed), auch wenn ich mich frage, warum diese Funktion dich überfordert. Die ist doch recht einfach zu verwenden?
    Welche der beiden Funktionen du jetzt aufrufst, hängt von deinem restlichen Code ab. Wenn du file desc. verwendest, rufe _filelengthi64 auf und wenn du file handles (HANDLE) verwendest, dann GetFileSizeEx.



  • Sry, ich bin noch n bissl n Anfänger in Sachen Programmierung.

    Also wenn ich GetFileSizeEx verwenden will muss ich erst eine Instanz von der LARGE_INTEGER Struktur erstellen, richtig? (oder reicht es auch mit einem Typecast?)

    FILE *file
    file = fopen(dateipfad.c_str(), "rb");

    LARGE_INTEGER large_integer;
    LONGLONG QuadPart;
    GetFileSizeEx(file, large_integer.QuadPart);

    Ahh kann es sein, dass mein Fehler ist, dass file kein HANDLE sonder ein Dateideskriptor ist?

    Und stimmt das so wie ich es gemacht hab?



  • Du brauchst ein Filehandle. Das bekommst Du entweder mit
    HANDLE fHandle = CreateFile(...

    oder aber mit

    HANDLE fHandle = FindFirstFile(...

    im ersten Fall kannst Du dann so

    LARGE_INTEGER li;
    GetFileSizeEx(fHandle, &li);

    aufrufen.

    Im zweiten Fall enthält die WIN32_FIND_DATA - Struktur, die Dir FindFirstFile füllt, schon die Dateigröße:
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa365740(v=vs.85).aspx


Anmelden zum Antworten