Написать большой файл - PullRequest
       6

Написать большой файл

11 голосов
/ 19 ноября 2008

Я пытаюсь записать в большой файл, но кажется, что он не работает для файлов больше 2 ГБ Я попытался с boost :: iostreams :: file_sink. Это только предел с потоком повышения? Есть ли другой способ, которым я могу написать большой файл на Win64 и win32?

Ответы [ 3 ]

9 голосов
/ 19 ноября 2008

Это зависит от:

  • Файловая система, которую вы используете. Старые файловые системы, такие как FAT, допускают только файлы размером до 2 ГБ. Используйте NTFS.
  • Ваша библиотека должна быть скомпилирована, чтобы разрешить большие файлы (64-битные смещения поиска). Если они используют 32-битные числа для поиска в файле (проверьте аргументы и результаты вызовов «искать» и «сообщить»), вы можете получить доступ только к 2 ГБ (2 ^ 31 бит, 32-й знак +/-)

Это также может помочь: http://www.boost.org/doc/libs/1_37_0/libs/iostreams/doc/faq.html#offsets

5 голосов
/ 19 ноября 2008

В Win32 / 64 файлы ReadFile и WriteFile могут записывать файлы размером более 4 ГБ. Позиционирование выполняется с помощью 64-битного значения _LARGE_INTEGER в SetFilePointerEx . Аналогично, чтобы получить размер файла, который вам нужен GetFileSizeEx , а не базовый GetFileSize.

1 голос
/ 19 ноября 2008

В NTFS единственным реальным ограничением является размер тома. Если вы хотите проверить это, вы можете создать фиктивный файл с помощью командной строки:
fsutil file createnew [имя файла] [validdatalength]
Пример:
fsutil файл createnew TestFile.bin 65536000000
Это должно создать файл размером 64 ГБ, если у вас есть том NTFS.

...