question: strong> Après avoir frappé ma tête contre mon clavier et plusieurs livres de texte, j'ai décidé de sonder tous à vous de voir: Comment allez-vous gars / gals accomplir le fichier Cross OS E / S qui prend en charge les gros fichiers? Strong> p>
P.s. J'ai des liens de recherche: p>
3 Réponses :
Il semble que vous avez besoin d'une version différente de MINGW: P>
http://mingw-w64.sourceforge.net/ P>
La variante W64 a un support de fichier grand compatible Linux, même sur des fenêtres 32b. P>
Autant que nous aimons tous haïr sur M $ pour leur conformité de normes de merde, celui-ci était en réalité la faute du Comité ISO C. À l'origine, ils ont utilisé Taille_T pour tous les paramètres de fichier, mais Taille_t est choisi en fonction de l'architecture Alu / Memory et non basé sur les capacités de manutention du fichier OS. Lorsque tout le monde passait dans des processeurs de 64 bits, Mme bloquée avec une longue durée de 32 bits, qu'ils étaient parfaitement autorisées à faire et à être toujours conformes, mais maintenant leurs fichiers sont plus gros que leur plus gros type arithmétique.
Notez que cela a finalement été Résolu en C99, mais le support MSVC C99 est essentiellement inexistant. P>
En interne, cependant, ils utilisent réellement un pointeur 64 bits pour suivre votre position dans le fichier. Le problème est dû à l'API malheureuse CSTDLIB que vous ne pouvez pas utiliser "FSEAK" ou "FTELL" pour quelque chose de plus grand que 32 bits. P>
Pour démontrer que Windows utilise réellement un pointeur de fichier 64 bits, Ce code fonctionnera comme prévu comme prévu lors de la compilation avec MSVC ++ et générera un fichier de 40 Go (non signé de longs 32 bits) sur votre disque dur. p> alors comment T'aider? Eh bien, MS fournit sa propre API non standard qui permet 64 bits Fsek () et FTell () P> https://msdn.microsoft.com/en-us/library/75YW9BF3.aspx p> aussi, vous pouvez réellement déplacer le pointeur de fichier avec Fsek régulier () en le faisant par incréments ... essentiellement si vous allez: p> Il déplacera efficacement le pointeur de fichier sur la marque de 10 Go. P> < p> avec ftell () cependant, vous êtes probablement baisé sans utiliser l'API MS pour cela. P> TL; DR-FOPEN (), FREAD () et FORITE () fonctionnent sur MSVC avec de la grande Fichiers> 2 Go, mais FTell () et Fsek () Ne font pas parce que l'API n'était pas conçue correctement. P> P>
Vous n'êtes pas complètement em> sans options sous Windows: p>
in Linux, vous pouvez utiliser
_fseeki64 code>
li >
_ftelli64 code>
li >
-d_file_offset_bits = 64 code> (A
#define _file_offset_bits 64 code> pourrait em> travail, pas sûr) et
fseeko code> /
ftello code>. De nombreux systèmes ont également
fseeeko64 code> et
ftello64 code>), qui fonctionnent indépendamment de ce
#define code>. P>