Индексы для файлов - PullRequest
       11

Индексы для файлов

1 голос
/ 28 марта 2011

Какой типичный тип используется для хранения индекса символа в файле?В настоящее время я использую long unsigned int, но имеет ли это смысл?Должен ли я использовать std::size_t вместо этого, или это имеет еще меньше смысла?

Ответы [ 5 ]

4 голосов
/ 28 марта 2011

std::streampos - это стандартный тип для представления позиций в символьных потоках (включая файлы).

2 голосов
/ 28 марта 2011

Как говорит Майк Сеймор, если вы работаете с потоками C ++ io, std :: streampos является стандартным типом для представления позиции в файле.См.

http://www.cplusplus.com/reference/iostream/streampos/

Обратите внимание, что std :: size_t может быть неправильным.Например, в 32-разрядной системе std :: size_t будет 32-разрядным целым числом без знака, тогда как система вполне может поддерживать файлы, размер которых превышает 2 ^ 32 байта = 4 ГБ.

FWIW, в мире POSIX существует целочисленный тип со знаком off_t, который используется для представления размеров файлов и смещений.С помощью различных макросов (например, _FILE_OFFSET_BITS = 64 в Linux) можно переопределить off_t, чтобы он стал 64-битным типом.

2 голосов
/ 28 марта 2011

вы, вероятно, в безопасности с обоими; в основном вы хотите иметь возможность хранить значение max_file_size;

размер в байтах файла определяется как long в struct stat; на 64-битной платформе size_t, вероятно, всегда определяется как 64-битное число, на 32-битном - как 32-битное число и т. д .; если вы не используете странные компиляторы.

проверить a size_t связанных сообщений

Я бы пошел на долго. std :: size зависит от языка, и я склонен использовать здесь тип операции. но опять же, я не вижу проблем с использованием std :: size_t

0 голосов
/ 28 марта 2011

Хотите ли вы также представить "неверный индекс" как-нибудь? Если так, то почему бы просто не использовать ssize_t.

0 голосов
/ 28 марта 2011

Если вы говорите о символах ASCII, у них не будет значений выше 127. Поэтому достаточно использовать тип данных без знака.

...