📜  fseek()vs rewind()在C中(1)

📅  最后修改于: 2023-12-03 15:00:51.465000             🧑  作者: Mango

fseek() vs rewind()在C中

在C语言中,有两个函数可以在文件中移动指针:fseek()和rewind()。这两个函数看起来很相似,但实际上有一些重要的区别。

fseek()

fseek()函数用于在文件中移动指针。它的原型如下:

int fseek(FILE *stream, long int offset, int whence);
  • stream:指向要移动指针的文件流。
  • offset:要移动的字节数,可以是正数或负数。
  • whence:指定移动方式,可以取如下值:
    • SEEK_SET:从文件开头偏移。
    • SEEK_CUR:从当前位置偏移。
    • SEEK_END:从文件结尾偏移。

fseek()函数返回0表示移动成功,返回非零值表示移动失败。

下面是一个使用fseek()函数的例子:

#include <stdio.h>

int main() {
   FILE *fp;

   fp = fopen("test.txt", "r+");
   if (fp == NULL) {
      perror("Error opening file");
      return(-1);
   }

   fseek(fp, 10, SEEK_SET);
   fputs("This is a test", fp);

   fclose(fp);
   return 0;
}

上面的例子打开了一个名为test.txt的文件,并在文件中移动指针到偏移量为10的位置,并在此位置写入了一个字符串。最后,文件被关闭。

rewind()

rewind()函数用于将文件指针重置到文件开头。它的原型如下:

void rewind(FILE *stream);
  • stream:指向要重置指针的文件流。

rewind()函数没有返回值。

下面是一个使用rewind()函数的例子:

#include <stdio.h>

int main() {
   FILE *fp;
   char c;

   fp = fopen("test.txt", "r");
   if (fp == NULL) {
      perror("Error opening file");
      return(-1);
   }

   while ((c = fgetc(fp)) != EOF) 
      printf("%c", c);

   rewind(fp);
   printf("\n");

   while ((c = fgetc(fp)) != EOF) 
      printf("%c", c);

   fclose(fp);
   return 0;
}

上面的例子打开了一个名为test.txt的文件,并读取了文件的内容。然后,文件指针被重置到文件开头,并再次读取了文件的内容。最后,文件被关闭。

总结

fseek()和rewind()函数在文件指针操作中非常有用。它们都可以在文件中移动指针,但fseek()函数更为强大,因为它可以在文件中任意位置移动指针。在使用这两个函数时,务必小心,以避免破坏文件。