ftello/fseeko和fgetpos/fsetpos有什么区别?两者似乎都是文件指针获取/设置功能,使用不透明偏移类型有时允许64位偏移.
它们是在不同平台上还是由不同标准支持?它使用的偏移类型是否更灵活?
顺便说一句,我知道fgetpos/fsetpos和ftell/fseek,但这不是重复.这个问题询问FTELL/FSEEK,答案是不适用于ftello/fseeko.
代码目前正在执行此操作,fgetpos会处理大于4GB的文件,但搜索会返回错误,所以任何想法如何寻找结束file > 4GB?
fpos_t currentpos;
sok=fseek(fp,0,SEEK_END);
assert(sok==0,"Seek error!");
fgetpos(fp,¤tpos);
m_filesize=currentpos;
Run Code Online (Sandbox Code Playgroud) 假定交换文件中的每两行,直到仅剩一行或所有行都用完为止。我不想使用其他文件。
这是我的代码:
#include <stdio.h>
int main() {
FILE *fp = fopen("this.txt", "r+");
int i = 0;
char line1[100], line2[100];
fpos_t pos;
fgetpos(fp, &pos);
//to get the total line count
while (!feof(fp)) {
fgets(line1, 100, fp);
i++;
}
i /= 2; //no. of times to run the loop
rewind(fp);
while (i-- > 0) { //trying to use !feof(fp) condition to break the loop results in an infinite loop
fgets(line1, 100, fp);
fgets(line2, 100, fp);
fsetpos(fp, &pos);
fputs(line2, fp);
fputs(line1, fp);
fgetpos(fp, …Run Code Online (Sandbox Code Playgroud) 如果我跑:
FILE* pFile = fopen("c:\\08.bin", "r");
fpos_t pos;
char buf[5000];
int ret = fread(&buf, 1, 9, pFile);
fgetpos(pFile, &pos);
Run Code Online (Sandbox Code Playgroud)
我得到ret = 9和pos = 9.
但是,如果我跑
FILE* pFile = fopen("c:\\08.bin", "r");
fpos_t pos;
char buf[5000];
int ret = fread(&buf, 1, 10, pFile);
fgetpos(pFile, &pos);
Run Code Online (Sandbox Code Playgroud)
ret = 10如预期的那样,但是pos = 11!
怎么会这样?