2008-11-19 10 views
11

J'essaie d'écrire dans un gros fichier, 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 flux de boost? Y at-il un autre moyen que je peux écrire un gros fichier sur Win64 et Win32?Ecrire un grand fichier

Répondre

9

Cela dépend:

  • Le système de fichiers que vous utilisez. Les anciens systèmes de fichiers tels que FAT autorisent uniquement les fichiers de 2 Go maximum. Utilisez NTFS.
  • Votre bibliothèque doit être compilée pour autoriser les fichiers volumineux (corrections de recherche 64 bits). S'ils utilisent 32bit ints pour chercher dans le fichier (vérifiez les arguments et les résultats des appels "seek" et "tell"), vous ne pouvez accéder qu'à 2GB (2^31bits, le 32ème est le signe +/-)

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

+0

"Thirtytwoth"? Je ne pouvais pas m'en empêcher :) – korona

+0

"Nous parlons de grammaire ici, le sens est un autre problème" - Je ne me souviens pas où j'ai lu cela. –

+0

Merci :) offset_to_position trouvé dans votre lien fait l'affaire – user38941

5

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

1

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

+0

Je n'ai jamais entendu parler de fsutil. Merci! – Ferruccio

Questions connexes