Выполнение операций файла с 64-разрядными адресами в C + MinGW32

Я уволил бы его, но к счастью, он никогда не будет на самом деле наниматься.

я предпочел бы, чтобы он провел 2 часа, пишущий чистый, почти функционирующий код, чем для него для удара чего-то вместе, которое работает.

Стиль программирования важен, особенно при работе над командой.
Это становится очень важным при поддержании унаследованных приложений, записанных несколькими людьми.

Часть того, чтобы быть профессионалом, и не только некоторой деточкой сценария, заботится о коде. Это о понимании, что кто-то еще считает этот код (Возможно, даже Вы!) шесть месяцев с этого времени. Поэтому необходимо сделать максимально легким поддержать.

9
задан Fantius 1 February 2012 в 15:55
поделиться

5 ответов

Функция ftell () обычно возвращает unsigned long , которое увеличивается только до 2 32 байтов (4 ГБ ) в 32-битных системах. Таким образом, вы не можете получить смещение файла для файла размером 24 ГБ, который поместится в 32-битный длинный .

У вас может быть доступна функция ftell64 () или Стандартная функция fgetpos () может вернуть вам большее смещение.

3
ответ дан 3 November 2019 в 07:14
поделиться

Вы можете попробовать использовать предоставляемые ОС файловые функции CreateFile и ReadFile . Согласно теме Указатели файлов , позиция сохраняется как 64-битное значение.

3
ответ дан 3 November 2019 в 07:14
поделиться

Если вы не можете использовать 64-битный метод, предложенный Loadmaster, я думаю, вам придется разбить файл на части.

Этот ресурс , кажется, предполагает, что это возможно с помощью _telli64 (). Однако я не могу это проверить, так как не использую mingw.

0
ответ дан 3 November 2019 в 07:14
поделиться

Я не знаю никакого способа сделать это в одном файле, это немного похоже на взлом, но если правильное разделение файла не является реальным вариантом, вы можете написать несколько функций, которые временно разбивают файл: одну, которая использует ftell () для перемещения по файлу и меняет ftell () на новый файл, когда он достигает точки разделения, а затем другую, которая сшивает файлы вместе перед выходом. Абсолютно неудачный подход, но если не будет найдено лучшего решения, это может быть способом выполнить работу.

0
ответ дан 3 November 2019 в 07:14
поделиться

Даже если ftell () в библиотеке Microsoft C возвращает 32-битное значение и, таким образом, очевидно, будет возвращать фиктивные значения, когда вы достигнете 2 ГБ, простое чтение файла все равно должно работать нормально. Или вам тоже нужно поискать в файле? Для этого вам понадобятся _ftelli64 () и _fseeki64 ().

Обратите внимание, что в отличие от некоторых систем Unix, при открытии файла вам не нужен какой-либо специальный флаг, указывающий, что он находится в каком-то «64-битном режиме». Базовый Win32 API отлично справляется с большими файлами.

-1
ответ дан 3 November 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: