lseek在Windows中使用2 gb文件

时间:2012-05-29 14:21:06

标签: c++ c

  

可能重复:
  Question about file seeking position

我面临一个与lseek()相关的问题。当我们尝试在Windows(32位机器)中访问2GB +文件时,它会返回失败。是否有任何限制lseek可以在我们正在使用的文件中设置文件指针??? offset valye是2154654555。

编译器详细信息

c:\ Program Files \ Inno Setup 5 \ Compil32.exe

3 个答案:

答案 0 :(得分:2)

你应该看看_lseeki64,它需要64位偏移量。 lseek()(及其后继者,_lseek())仅限于带符号的32位偏移,其上限为2147483647.您的偏移量215465455超过了该值(如果存储在long中,将被视为负数) 。见http://msdn.microsoft.com/en-us/library/1yee101t。 (你需要一些与你的编译器相当的东西。)

答案 1 :(得分:1)

off_t的最大值是2147483647,其中off_t是lseek()中偏移的类型

答案 2 :(得分:1)

lseek不适用于大于2 GB的文件,因为偏移量输入是32位变量,其值不能大于2147483647.在许多操作系统中,它通过编译时宏或通过提供替代功能来支持。

如果是MSVC编译器,您可以尝试_lseeki64。偏移需要64位变量。由于您没有使用MSVC,因此可以检查等效功能。