0

我正在尝试使用以下方法获取此大小的文件:

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;
}
4

2 回答 2

1

fstat() 可用于获取文件的大小。这比读取文件来计算大小要好。msdn 文档中的 fstat

编辑:我不太确定 fstat 在 Windows 上的行为。

于 2012-08-06T08:48:20.537 回答
0

以二进制文件(使用 )打开文件O_BINARY可能会有所帮助。否则,您可能会遇到 libne 中断和 EOF 字符的问题。

于 2012-08-06T06:36:54.867 回答