我正在尝试使用以下方法获取此大小的文件:
size_t fsize = 0;
fseek(fin, 0L, SEEK_END);
fsize = ftell(fin);
fseek(fin, 0L, SEEK_SET);
有问题的文件有点超过 2GiB,并且 ftell 返回一些巨大的数字。
我的应用程序还要求在每次读取后将查找指针设置回多个字节。我用了以下。
i = fread(inbuf, 1,readSize, fin);
fseek(fin, -16, SEEK_CUR);
每次读取后,我检查是否i
等于 16,如果我在最后一次读取后到达文件末尾,通常会发生这种情况。但是,这也不起作用,并且将零值分配给i
,表明查找指针没有向后移动。
我应该注意到我的程序在 Linux 中运行良好,并且已经过不同读取和文件大小的测试。该代码几乎与 Linux 版本的代码相同。不同之处在于我无法stdint
在 Windows 中使用 C99 中的库。除此之外,代码完全相同。Linux 版本使用完全相同的测试文件和读取大小可以正常工作。
最后,我要提一下这是一个CUDA程序(运行时版本4.2),使用VS2010,在Win7上。这是一个 64 位程序。
编辑
这个文件是用 'b' 标志打开的。这是代码:
if(!(fin = fopen(argv[1], "rb")))
{
printf("The input file: %s could not be opened\n", argv[1]);
err = -5; goto exit;
}
if(!(fout = fopen(argv[2], "wb")))
{
printf("The output file: %s could not be opened\n", argv[1]);
err = -6; goto exit;
}