首页 > C > 文件 阅读:57,774

文件相关操作

C语言中除了文件的读写操作之外,还有如下一些有关文件的其它操作:

11.6.1rewind

在文件进行读写操作的时候,有一个叫当前读写位置的指针,用来记录文件当前读写的位置。可以通过rewind()函数或者fseek()函数来移动文件的当前读写位置指针。

rewind(fp);//首部

执行完上面的函数后,会将文件fp当前的读写位置移动到文件的开头位置。

将文件当前读写位置移动到最开始的地方。等同于:

fseek(fp,0,0);

11.6.2fseek

fseek()函数用于更灵活的移动文件当前的读写位置指针。它有三个参数,第一个参数是被打开文件的指针,第二个参数是移动的偏移,偏移值可以为正或者为负,第三个参数是代表第二个参数的偏移相对于什么位置。比如:

fseek(fp,50,SEEK_CUR);

那么就是将文件的读写指针移动到当前位置后面50个字节。而SEEK_SET则是相对于文件开头,SEEK_END是文件结尾。比如

fseek(fp, -50, SEEK_END);

就是将文件读写指针移动到距离文件结束50个字节的位置。

下面是使用fseek()函数来移动文件读写指针的一个例子:

 

int seek_demo()

{

 

         //打开或者创建文件

         char *path = "h:\\doc\\new.txt";

 

         FILE *fp1 = NULL;

         errno_t err;

         err = fopen_s(&fp1,path,"w");

         if(fp1==NULL || err != 0)

         {

                   printf("Open file failed\n");

                   return -1;

         }

         //基于fp1这个指针,对文件进行读写等操作

         char buff[]="hello world";

         fwrite(buff,sizeof(buff),1,fp1);

        

         //rewind(fp1);

         fseek(fp1,-5,SEEK_CUR);

 

         int data = 0x10;

 

         fwrite(&data,sizeof(data),1,fp1);

 

         fclose(fp1);

 

         //读数据

         err = fopen_s(&fp1,path,"r");

         if(err!=0)

         {

                   return -1;

         }

         data = 0;

         memset(buff,0,sizeof(buff));

 

         fread(buff,sizeof(buff),1,fp1);

         printf("buff:%s\n", buff);

         fread(&data,sizeof(data),1,fp1);

         printf("data:0x%x\n", data);

 

         fclose(fp1);

         return 0;

 

}

11.6.3feof

在读文件的时候,当文件的当前位置到达文件末尾,就不能继续读数据了。函数feof()就是用来判断文件当前位置是否达到文件末尾,如果到达,就返回真,否则为假。

下面是一个使用feof()来读文件的例子:

int read_ini()

{

         char *file="h:\\doc\\config.ini";

         FILE *pfile = NULL;

         errno_t err = fopen_s(&pfile,file,"r");

         if(err !=0 ||pfile == NULL)

         {

                   return -1;

         }

         while(!feof(pfile))//如果文件当前读写位置没有到达结尾,就继续读

         {

                   char buff[1024]={0};

                   fgets(buff,1024,pfile);

                   printf("%s",buff);

         }

         printf("\n");

         fclose(pfile);

         return 0;

}

11.6.4rename/remove/mkdir

文件的重命名,删除,创建文件夹都是与文件有关的一些基本操作。下面一一介绍C语言里这些函数的调用方式:

1,重命名文件:

void rename_file()

{

    //将文件1.txt重命名为2.txt

         char *src="h:\\doc\\1.txt";

         char *dst="h:\\doc\\2.txt";

         rename(src,dst);

 

}

2,删除文件

void delete_file()

{

         char *del_file = "h:\\doc\\test.dat";

         remove(del_file);

}

 

3,创建文件夹

int  create_dir()

{

         //创建文件夹

         char *dir = "h:\\doc\\test\\x";

         int res = _mkdir(dir);//注意,创建不能递归完成,h:\doc\test必须已经存在,否则函数会失败

         if(res==-1)

         {

                   printf("create dir failed\n");

                   return -1;

         }

         return 0;

}

11.6.5ftell

函数ftell()用于获取文件读写指针的当前位置。可以结合fseek()函数来计算文件的大小,代码如下:

static long getfilesize(char *szFile)

{

         long size = 0;

         if (szFile == NULL)

         {

                   return 0;

         }

         FILE *fp;

         if((fp=fopen(szFile,"r"))==NULL)

                   return 0;

         fseek(fp,0,SEEK_END);//首先将文件读写指针移动到文件结尾

         size = ftell(fp);    //获取文件读写指针的当前位置,即为文件大小;

         fclose(fp);

         return size;

}

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注