Déterminer la taille de fichier 64 bits en C sur MinGW 32 bits

Je deviens fou en essayant de faire fonctionner cela avec MinGW 32 bits. Cela fonctionne sur toutes les autres plateformes que j’ai essayées.

Tout ce que je veux, c’est obtenir la taille d’un fichier> 4 Go dans un int de 64 bits.

Cela fonctionne bien sur d’autres plates-formes:

#define _FILE_OFFSET_BITS 64 #include  int64_t fsize(const char *filename) { struct stat st; if (stat(filename, &st) == 0) return st.st_size; return -1; } 

J’ai essayé d’append les définitions suivantes avant le code ci-dessus, en fonction des diverses suggestions trouvées en ligne:

 #define _LARGEFILE_SOURCE 1 #define _LARGEFILE64_SOURCE 1 #define __USE_LARGEFILE64 1 

Aussi essayé:

 #ifdef __MINGW32__ #define off_t off64_t #endif 

Et finalement essayé d’append -D_FILE_OFFSET_BITS = 64 aux drapeaux gcc (devrait être identique à ce qui est défini ci-dessus mais …)

Pas de chance. Le fichier int64_t renvoyé est toujours tronqué à une valeur 32 bits.

Quelle est la bonne façon de déterminer une taille de fichier 64 bits dans MinGW 32 bits?

Merci!

Je n’ai pas la main sur MinGW, mais si je me souviens bien, il existe une fonction _stat64 qui utilise une struct __stat64 . Vous voudrez probablement cacher cette laideur avec des macros rusés!

Merci les gars, bonnes suggestions mais je l’ai compris … MinGW nécessite cette définition pour activer la struct __stat64 et la fonction _stat64:

 #if __MINGW32__ #define __MSVCRT_VERSION__ 0x0601 #endif 

Alors ceci fonctionne:

 int64_t fsize(const char *filename) { #if __MINGW32__ struct __stat64 st; if (_stat64(filename, &st) == 0) #else struct stat st; if (stat(filename, &st) == 0) #endif return st.st_size; return -1; } 

J’espère que ça aide quelqu’un.

Vous pouvez essayer lseek64 si cela existe dans le paquetage MinGW

  #define _LARGEFILE64_SOURCE /* See feature_test_macros(7) */ #include  #include  off64_t lseek64(int fd, off64_t offset, int whence);