c语言文件操作(2)

1.文件的随机读写:

fseek函数

int fseek ( FILE * stream, long int offset, int origin );

fseek函数是根据文件指针的位置和偏移量来定位文件指针。

其中,origin所含的参数:

seek_set:文件开头
seek_cur:文件指针的当前位置
seek_end:文件结束*

语言可能难懂,可以配合下面的代码来理解一下:

#include <stdio.h>

int main ()
{
  FILE * pFile;
  pFile = fopen ( "example.txt" , "wb" );
  fputs ( "This is an apple." , pFile );
  fseek ( pFile , 9 , SEEK_SET );
  fputs ( " sam" , pFile );
  fclose ( pFile );
  return 0;
}

结果展示:

 sam替换了从文件开头后的第九位后的些许数。

ftell函数:就是返回文件指针距开头的位置。

long int ftell ( FILE * stream );

代码展示:

#include <stdio.h>

int main()
{
    FILE* pFile;
    long size;

    pFile = fopen("myfile.txt", "rb");
    if (pFile == NULL) perror("Error opening file");
    else
    {
        fseek(pFile, 0, SEEK_END);   // non-portable
        size = ftell(pFile);
        fclose(pFile);
        printf("Size of myfile.txt: %ld bytes.\n", size);
    }
    return 0;
}

结果展示: 

 myfile文件中有:

rewind函数:让文件指针的位置回到文件的起始位置

void rewind ( FILE * stream );

代码展示:

#include <stdio.h>

int main ()
{
  int n;
  FILE * pFile;
  char buffer [27];

  pFile = fopen ("myfile.txt","w+");
  for ( n='A' ; n<='Z' ; n++)
    fputc ( n, pFile);
  rewind (pFile);
  fread (buffer,1,26,pFile);
  fclose (pFile);
  buffer[26]='\0';
  puts (buffer);
  return 0;
}

结果展示:

2.判断文件结束原因

ferror函数:

int ferror ( FILE * stream );

在文件读取结束后,判断文件是否因为错误而结束。是的话返回非零值。

feof函数:

在文件读取结束后,判断文件是否因为读取到EOF而结束。是的话返回非NULL。

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
 int c; // 注意:int,⾮char,要求处理EOF
 FILE* fp = fopen("test.txt", "r");
 if(!fp) {
 perror("File opening failed");
 return EXIT_FAILURE;
 }
 //fgetc 当读取失败的时候或者遇到⽂件结束的时候,都会返回EOF
 while ((c = fgetc(fp)) != EOF) // 标准C I/O读取⽂件循环
 { 
 putchar(c);
 }
 //判断是什么原因结束的
 if (ferror(fp))
 puts("I/O error when reading");
 else if (feof(fp))
 puts("End of file reached successfully");
 fclose(fp);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值