【问题标题】:Move the file pointer back after fseekfseek 后将文件指针移回
【发布时间】:2019-04-20 21:36:10
【问题描述】:

我知道这个问题听起来很傻,但我不知道什么时候修改我的文件指针。我刚刚开始学习文件如何在 C 中工作。我正在做一个简单的练习,我必须编写显示文件大小并将文件指针作为参数的函数。这是我的功能:

int file_size_from_file(FILE *f)
{
    int size;
    if(f==NULL)
    {
        return -2;
    }
    fseek (f, 0, SEEK_END);
    size = ftell(f);
    return size;
}

但是系统显示我不能修改文件指针。我认为我所要做的就是在size... 之后写fseek(f,0,SEEK_SET); 以将光标设置回原来的位置,但它没有用。

系统检查功能如下:

FILE *f = fopen("bright", "r");

int pos = 7220;

fseek(f, pos, SEEK_SET);

printf("#####START#####");
int res = file_size_from_file(f);
printf("#####END#####\n");

test_error(res == 7220, "Funkcja file_size_from_file zwróciła nieprawidłową wartość, powinna zwrócić %d, a zwróciła %d", 7220, res);
test_error(ftell(f) == pos, "Function should not modify file pointer");

fclose(f);

检查后显示“失败 - 函数不应修改文件指针”

【问题讨论】:

  • “但是系统显示我不能修改文件指针”:怎么回事?
  • 你是怎么调用file_size_from_file函数的?
  • “...但它不起作用” - 请编辑您的问题并解释“不起作用”的含义。编译错误/运行时错误/意外结果/来自地狱的恶魔从电源插座中弹出并让您的计算机遭受永恒的折磨/以上所有/以上都不是/其他?
  • @daka 我编辑了你问的所有内容
  • @ybungalobill 它使用我编辑的代码,用该代码检查我的函数,然后显示“FAIL - 函数不应修改文件指针”

标签: c stdio fseek


【解决方案1】:

您的函数应将文件设置回调用时的位置:

long int file_size_from_file(FILE *f)
  {
  long int size;
  long int pos;

  if(f==NULL)
    return -2;

  pos = ftell(f);

  fseek (f, 0, SEEK_END);
  size = ftell(f);
  fseek (f, pos, SEEK_SET);

  return size;
  }

祝你好运。

【讨论】:

  • 谢谢它的工作,我与“fseek (f, 0, SEEK_SET);”作斗争将光标设置到起始位置。我必须弄清楚 fseek 到底做了什么。
  • fseek(f, 0, SEEK_SET) 将设置f 指向文件的开头,而不是之前设置的位置。 fseek(f, 0, SEEK_SET) 等价于 rewind(f)
猜你喜欢
  • 2013-12-20
  • 2014-11-19
  • 1970-01-01
  • 2011-06-22
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多