2008-11-19 3 views
11

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

ответ

9

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

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

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

+0

"Thirtytwoth"? Я просто не мог с собой поделать :) – korona 2008-11-19 15:46:39

+0

«Мы говорим грамматику здесь, смысл - еще одна проблема» - я не помню, где я это читал. – 2008-11-20 08:29:31

5

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

1

В NTFS единственным реальным ограничением является размер тома. Если вы хотите, чтобы проверить это вы можете создать пустой файл с помощью командной строки:
Fsutil файл CreateNew [имя файла] [validdatalength]
Ex:
Fsutil файл CreateNew TestFile.bin 65536000000
Это должно создать 64GB файл, если у вас есть том NTFS.