文件索引

时间:2011-03-28 12:18:23

标签: c++ file filestream

用于存储文件中字符索引的典型类型是什么?我目前正在使用long unsigned int,但这有意义吗?我应该使用std::size_t代替,还是更不合理呢?

5 个答案:

答案 0 :(得分:4)

std::streampos是表示字符流(包括文件)中位置的标准类型。

答案 1 :(得分:2)

你可能都很安全;基本上你希望能够存储max_file_size值;

文件的大小(以字节为单位)在struct stat中定义为long;在64位平台上,size_t可能总是定义为64位数字,32位作为32位数字等;除非你使用奇怪的编译器。

结帐a size_t related post

我会坚持到底。 std :: size是特定于语言的,我倾向于在这里使用特定于操作的类型。但同样,我认为使用std :: size_t也没问题

答案 2 :(得分:2)

正如Mike Seymor所说,如果你使用C ++ io流,std :: streampos是表示文件位置的标准类型。参见

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

请注意,std :: size_t可能不正确。例如,在32位系统上,std :: size_t将是32位无符号整数,而系统可能支持大于2 ^ 32字节= 4 GB的文件。

FWIW,在POSIX世界中,有一个(带符号)整数类型off_t,用于表示文件大小和偏移量。使用各种宏(例如Linux上的_FILE_OFFSET_BITS = 64),可以将off_t重新定义为64位类型。

答案 3 :(得分:0)

如果你在谈论ASCII字符,它们的值不会超过127.因此,使用unsigned char数据类型就足够了。

答案 4 :(得分:0)

你想要以某种方式表示“无效索引”吗?如果是这样,为什么不使用ssize_t