在Windows上使用ACE::truncate函数时报错:“试图将文件指针移动到文件开头之前”
代码如下:
// 指定文件大小
ACE_OFF_T offset = 3 * 1024 * 1024 * 1024;
if (ACE_OS::truncate("Tick.data", offset) != 0)
ACE_ERROR_RETURN((LM_ERROR,
ACE_TEXT("(%P|%t)[%T] %p\n"),
ACE_TEXT("truncate")),
-1);
原因在于数字字面量默认为int类型,计算时超过int最大值时将会产生负数。
修改代码如下:
// 指定文件大小
ACE_OFF_T offset = ACE_OFF_T(3) * 1024 * 1024 * 1024;