Écrire un fichier volumineux

J’essaie d’écrire dans un fichier volumineux, mais il semble que cela ne fonctionne pas pour les fichiers de plus de 2 Go. J’ai essayé avec boost :: iostreams :: file_sink. Est-ce juste une limite avec le stream de boost? Existe-t-il un autre moyen d’écrire un fichier volumineux sur Win64 et Win32?

Cela dépend de:

  • Le système de fichiers que vous utilisez. Les anciens systèmes de fichiers tels que FAT n’autorisent que les fichiers jusqu’à 2 Go. Utilisez NTFS.
  • Votre bibliothèque doit être compilée pour autoriser les fichiers volumineux (décalages de recherche 64 bits). S’ils utilisent des bits de 32 bits pour chercher dans le fichier (vérifier les arguments et les résultats des appels “chercher” et “dire”), vous ne pouvez jamais accéder à 2 Go (2 ^ 31 bits, le 32 est le signe +/-)

Cela pourrait aussi aider: http://www.boost.org/doc/libs/1_37_0/libs/iostreams/doc/faq.html#offsets

Dans Win32 / 64, ReadFile & WriteFile peut écrire des fichiers de plus de 4 Go. Le positionnement est effectué via une valeur 64 bits _LARGE_INTEGER dans SetFilePointerEx . De même, pour obtenir la taille du fichier, vous avez besoin de GetFileSizeEx et non du GetFileSize de base.

En NTFS, la seule limite réelle est la taille du volume. Si vous voulez tester cela, vous pouvez créer un fichier factice en utilisant la ligne de commande:
fichier fsutil createnew [nom du fichier] [longueur de longueur]]
Ex:
fichier fsutil createnew TestFile.bin 65536000000
Cela devrait créer un fichier de 64 Go en supposant que vous avez un volume NTFS.