Я пытаюсь записать в большой файл, но похоже, что он не работает для файлов размером более 2 ГБ. Я попытался с boost:: iostreams:: file_sink. Это только предел с потоком ускорения? Есть ли другой способ написать большой файл на Win64 и win32?
Создать большой файл
Ответ 1
Это зависит от:
- Файловая система, которую вы используете. Старые файловые системы, такие как FAT, допускают только файлы размером до 2 ГБ. Используйте NTFS.
- Ваша библиотека должна быть скомпилирована, чтобы разрешить большие файлы (64-бит искать смещения). Если они используют 32-битные ints для поиска в файле (проверьте аргументы и результаты вызовов "искать" и "сообщать" ), вы можете получить доступ только к 2GB (2 ^ 31бит, 32-й - знак +/-)
Это также может помочь: http://www.boost.org/doc/libs/1_37_0/libs/iostreams/doc/faq.html#offsets
Ответ 2
В Win32/64 файлы ReadFile и WriteFile могут записывать файлы размером более 4 ГБ. Позиционирование выполняется с помощью 64-битного значения _LARGE_INTEGER в SetFilePointerEx. Аналогично, чтобы получить размер файла, вам нужно GetFileSizeEx, а не базовый GetFileSize.
Ответ 3
В NTFS единственным реальным ограничением является размер тома. Если вы хотите проверить это, вы можете создать фиктивный файл с помощью командной строки:
fsutil file createnew [имя файла] [validdatalength]
Пример:
Файл файла fsutil TestFile.bin 65536000000
Это должно создать файл размером 64 ГБ, если у вас есть том NTFS.