17得票4回答
fseek 超出文件末尾的位置不会通过 feof 触发 EOF,为什么?

我正在从一个使用以下方式打开的文件中读取数据到内存中:FILE *f = fopen(path, "rb"); 在开始从文件中复制字节之前,我使用以下方法将指针定位到起始位置:/** ...

8得票3回答
在C语言中,如何通过fseek函数定位二进制文件的某个位置,并从该位置处开始使用fread函数读取文件内容?

我在想这是否是解决我的问题的最佳方式。 我知道二进制文件中特定偏移量的值,这些值包含我想要的信息......我想要偏移到这些偏移量,然后从该位置开始读取一定数量的字节。 使用谷歌之后,我得出结论,最好使用fseek()将偏移量移动到指定位置,然后使用fread()从该位置读取一定数量的字节...

8得票6回答
确定一个大于4GB的文件大小

目前的代码可以执行此操作,而且fgetpos可以处理大于4GB的文件,但是seek会返回一个错误,那么有什么办法可以寻找到大于4GB的文件结尾呢? fpos_t currentpos; sok=fseek(fp,0,SEEK_END); assert(sok==0,"Seek error!...

16得票3回答
为什么在更新模式下读写之间总是需要使用fseek或fflush?

问题:我尝试使用fopen模式"r+"读取文件中的某个字符串,并将其修改后写回到原文件,但是没有起作用。 回答:在写入之前一定要调用fseek,这样可以回到您要覆盖的字符串的开头,并且因为在读/写“+”模式下读取和写入之间始终需要fseek或fflush。 我的问题是为什么在读/写“+”模式...

24得票7回答
读取大型二进制文件每30个字节的最快方法是什么?

如何以最快的方式读取一个大型二进制文件(2-3 GB)中每30个字节?我了解到fseek存在I/O缓冲区的性能问题,但是我也不想在取出每30个字节之前将2-3 GB的数据读入内存。

69得票2回答
在C语言中向文件末尾添加内容

我想在c语言中将myfile.txt文件的内容附加到第二个文件myfile2.txt的末尾。我可以复制文件内容,但找不到一种附加文件内容的方法。以下是我的代码:FILE *pFile; FILE *pFile2; char buffer[256]; pFile=fopen("myfile.t...

7得票1回答
可以使用fseek(stdin,1,SEEK_SET)或者rewind(stdin)来清空输入缓冲区,而不用使用不可移植的fflush(stdin)吗?

自从我发现fflush(stdin)不是处理输入缓冲区中的换行符问题的可移植方式后,每当我必须使用scanf时,我就会使用以下方法: while((c = getchar()) != '\n' && c != EOF); 但是今天我偶然发现了这一行话,它来自cpluspl...

49得票2回答
在使用fseek()函数时,使用SEEK_CUR和零偏移量有什么作用?

while (fread(&product, sizeof(Product), 1, file) == 1) { product.price *= 2.0; fseek(file, -sizeof(Product), SEEK_CUR); ...

17得票1回答
使用fseek(file, 0, SEEK_END)处理二进制流时理解未定义行为的含义

C规范有一个有趣的脚注(#268 C11dr §7.21.3 9) “将文件位置指示器设置为文件末尾,例如fseek(file,0,SEEK_END),对于二进制流(由于可能存在尾随空字符)或对于任何不确定以初始换档状态结束的具有状态依赖编码的流都具有未定义的行为。” 这是否适用于读取文件...

25得票6回答
fseek()在文件系统中是如何实现的?

这不是纯粹的编程问题,但它会影响使用fseek()函数的程序性能,因此了解其工作原理非常重要。为避免被关闭,先声明一下。 我想知道在文件中间插入数据的效率如何。假设我有一个1MB大小的文件,然后我在512KB的偏移处插入一些内容,与将我的数据附加到文件末尾相比,这样做的效率如何?为了使示例完...