文件操作的全部注意过程

简介: 文件操作的全部注意过程

一,文件的打开与关闭过程

     在使用文件时要先用fopen函数打开文件,应注意,应用文件指针进行打开操作,而在使用完毕后用fclose关闭文件,这是文件的打开与关闭,是必要的操作

FLIE* pa=fopen("test.txt","r");//参数r表示从文件中读取操作

fclose(pa);//关闭文件

注意:使用相对路径打开文件test.txt,不带盘符,但使用这种方法此文件必须要跟程序存储在一个路径下。例如:当前程序在D:\soft文件夹中,而文件必须也在D:\soft目录下否则不可以使用相对路径,必须使用绝对路径。例如:当前程序在D:\soft文件夹中,而文件在D:\text文件夹中,必须使用绝对路径,而在这是,文件中的路径应写为D:\\text\\test.txt,因为“\”在C语言中要使用转义字符,要用“\\”表示,即代码试下

FILE* pa=fopen("D:\\text\\test.txt","r");

fclose(pa);

二,文件的操作的基本八大函数

1,fputc函数的使用

fputc函数用于从文件中写入一个字符,但不可以一次写入多个字符串

#include<stdio.h>
#include<stdlib.h>
int main()
{
  int a = 10000;
  char b[15] = "zhujunhao";
  FILE* pr=fopen("E:\\text\\test1.txt","w");
  if (pr == NULL)
  {
    printf("兔子兔子");
    exit(0);
  }
  fputc(a,pr);//此数不可以用b,因为fput(a,pr);a只能是一个字符
  fputc('j', pr);//不能添加字符串
  fputc('h', pr);
  fclose(pr);
  pr = NULL;
  return 0;
}

2,fgetc函数的使用

fgetc函数用于从文件中读取一个字符,但不可以一次读取字符串

#include<stdio.h>
#include<stdlib.h>
int main()
{
  FILE* pa =fopen("E:\\text\\test1.txt","r");
  printf("%c", fgetc(pa));//fgetc(pa)从文件中的第一个开始读取,先从第一个读取
  printf("%c", fgetc(pa));//fgetc(pa)从文件中自动读取第二个,即自动指向下一个读取
  printf("%c", fgetc(pa));//fget(pa)从文件中自动读取第三个
  fclose(pa);
  pa = NULL;
  return 0;
}

3,fputs函数的使用

fputs函数可以将一串字符串输出到文件中,与fputc的主要区别在于fputs可以输出字符串

#include<stdio.h>
#include<stdlib.h>
int main()
{
  FILE* pr = fopen("E:\\text\\test2.txt", "w");
  char a[15] = "aaa";
  if (pr == NULL)
  {
    printf("吃兔子");
    exit(0);
  }
  fputs(a,pr);//fputs可以添加许多个,fputc只能添加一个有关字符或者数
  fputs("zhujunhao", pr);//fputs可以添加字符串也可以添加字符,fputc只能添加字符
  fclose(pr);
  pr = NULL;
  return 0;
}//总结:对于fputs比fputc更为高级,最好用fputs,可助记为s为字符串,c为字符

4,fgets函数的使用

fgets函数是从文件中读取一串字符串,fgets(arr,n,pa),表示从文件pa中最多得到n个字符存储到arr中

#include<stdio.h>
#include<stdlib.h>
int main()
{
  char arr[50];
  FILE* pr = fopen("E:\\text\\test1.txt","r");
  if (pr == NULL)
  {
    printf("兔子");
    exit(1);
  }
  fgets(arr, 50, pr);
//在fgets中,第一个arr是将pr中读取的放到arr中,第二个50指最多读取50个数,第三个pr指从pr中读取
  printf("%s", arr);//注意:这里最多只能读取一行,若要读取第二行应在用一次fgets(arr, 50, pr);
//第一行数据结束后后有字符\n,所以在读取中也把\n读取到里面了,第二次可不用加\n即自动换行
  fclose(pr);
  pr = NULL;
  return 0;
}

5,fprintf函数的用法

fprintf函数的操作如下

#include<stdio.h>
#include<stdlib.h>
int main()
{
  int a = 666, b = 999;
  char arr[50] = "tuzi";
  FILE* pa = fopen("E:\\text\\test2.txt", "w");
  if (pa == NULL)
  {
    printf("兔子");
    exit(1);
  }
  fprintf(pa, "%d %s %d", a, arr, b);//将a,arr,b全部输出到pa所指向的文件中
  fclose(pa);
  pa = NULL;
  return 0;
}

此函数用于将数据写入文件

6,fscanf函数的用法

#include<stdio.h>
#include<stdlib.h>
int main()
{
  char ar[100];
  int a, b;
  FILE* pa = fopen("E:\\text\\test1.txt", "r");
  if (pa == NULL)
  {
    printf("兔子");
    exit(1);
  }
  fscanf(pa, "%s %d %d", ar, &a, &b);
//从文件中输入ar,a,b这三个数据,但是文件中必须有这三个类型的数据
  printf("%s %d %d", ar, a, b);
  fclose(pa);
  pa = NULL;
  return 0;
}

用于读取文件中的数据

7,fwrite和fread函数的用法

函数的形式:

       fwrite(a,size,count,pa);

       fread(a,size,count,pa);

函数的功能:

       fread()函数从文件pa中读取count个长度为size字节的数据块,将其存放到a中,同时从文件开始位置向后移动count*size个字节。fwrite()函数与之相同,与之不同的是fwrite是向文件中写入的操作

函数返回值:

       对于fread:  如果fread函数读取成功时,如果没有读取完或者刚好读取完文件的数据时,函数的返回值是count的数值,如果读取的字节已经超过文件的数据时,将会返回读取完文件数据时count的值

       对于fwrite:  如果fwrite函数写入成功时,将会返回实际所写入的字段数count,如果返回值小于count,说明操作发生了错误

fread运用的实例:

#include<stdio.h>
#include<stdlib.h>
int main()
{
  char a[500],b[500];
  FILE* pa = fopen("E:\\text\\test2.txt", "r");//文件数据为abcdefg数据长度为7
  if (!pa)
  {
    perror("兔子");
    exit(1);
  }
//对于fread和fwrite函数返回值,若其中写入或读入的数已经超出文件数据中的最后一个时,则返回的值会是读或写入时最大的n值                                           
  printf("%d\n", fread(a, sizeof(char), 2, pa));//将2个char大小的数据读入a中,即两个字符,返回值为2
  printf("%c\n", a[0]);//此时a[n]={'a','b'};
  printf("%d\n", fread(b, 4, 1, pa));
//此时b[n]={'c','d','e','f'},共四个,在用完fread或fwrite后文件指向会自动移动
  for (int i = 0; i < 4; i++)
    printf("%c", b[i]);
//不要用puts(b),以为fread和fwrite是用于二进制文件,puts会把乱码打印出来
  fclose(pa);
  pa = NULL;
  return 0;
}

fwrite运用的实例

#include<stdio.h>
#include<stdlib.h>
int main()
{
  FILE* pa = fopen("E:\\text\\test2.txt", "w");
  if (!pa)
  {
    perror("兔子");
    exit(1);
  }
  char a[5] = { '1','2','3','4','5'};
  fwrite(a, sizeof(char), 1, pa);
//只将第一个字符'1'写入进去了,此时文件中数据为1
  fwrite(a, sizeof(a), 1, pa);
//将数组a全部元素写入进去了,因为sizeof(a)即为全部元素所占的内存大小
  fclose(pa);//此时文件中数据为11234
  pa = NULL;
  return 0;
}

三,stdin和stdout的标准用法

       stdin是标准输入流,指从键盘中输入,与scanf函数用法相似

       stdout指从键盘中输出,与printf函数用法相似

例如:

#include<stdio.h>
int main()
{
  int ch = fgetc(stdin);//stdin指从键盘中输入,stdin是标准输入流,即键盘
  fputc(ch,stdout);//stdout指从键盘中输出,stdin是标准输出流,即屏幕
  return 0;
}

四,5大函数fseek,ftell,rewind,feof,perror的使用方法以及注意事项

1,fseek函数的使用,用于随意将指向文件中的数据

#include<stdio.h>
#include<stdlib.h>
int main()
{
  FILE* pa = fopen("E:\\text\\test3.txt", "r");//文件中的数据为123456789abcdef
  if (!pa)
  {
    puts("兔子");
    exit(1);
  }
  fseek(pa, 1, SEEK_SET);
//pa是文件指针,1表示偏移1个数据(刚开始指向首个字符)即偏移量
  printf("%c", fgetc(pa));
//其中,SEEK_SET是指向开始位置,SEEK_END指向最后一个位置,SEEK_CUR指向当前的位置
  fclose(pa);
  pa = NULL;
  return 0;
}//注意:对于fseek(pa,0,SEEK_END)为最后一个字符,偏移量不能为正数

2,ftell和rewind函数的使用,ftell返回与起始位置的偏移量,rewind返回文件的起始位置

#include<stdio.h>
#include<stdlib.h>
int main()
{
  FILE* pa = fopen("E:\\text\\test3.txt", "r");//文件中是123456789abcdef长度为15
  if (!pa)
  {
    puts("兔子");
    exit(1);
  }
  fseek(pa, 0, SEEK_END);
//若是偏移量是-1,如果没有fgetc()的话ftell(pa)输出为14,即倒数第二个,以为fgetc()会往前偏移一个单位
  printf("%c\n", fgetc(pa));//fgetc()会得到前面的一个数据,即自动往下一个偏移
  printf("%d\n", fgetc(pa));
  printf("%d\n", ftell(pa));
  rewind(pa);//将文件指向数据的起始位置
  printf("%d",ftell(pa));
  fclose(pa);
  pa = NULL;
  return 0;
}

3,feof函数和perror函数的用法,perror用来错误报错函数,feof判断在文件读取结束的时候,是读取失败还是遇到文件末尾结束

#include<stdio.h>
#include<stdlib.h>
int main()
{
  char c;
  FILE* pa = fopen("E:\\text\\test1.txt", "r");//文件里面为987654321
  if (!pa)
  {
    perror("兔子");//输出“兔子: No such file or directory”表示错误
    exit(1);
  }
  while ((c = fgetc(pa)) != EOF)//从文件开始循环到文件结束  
    putchar(c);//putchar函数输出字符时不换行
  //注意,不能用以下用法
  /*while(fgetc(pa)!=EOF)
    puttchar(fgetc(pa));*/
  //因为一遇到fgetc函数就会跳向下一个字符
  if (ferror(pa))//若读写错误返回非零,读写正确返回0值
    perror("\n错误");
  if (feof(pa))//如果当前位置在文件结尾(即EOF)返回非零,否则返回0值
    puts("\n成功");
  return 0;
}

     

相关文章
|
3月前
熟练使用文件操作类命令(2)
熟练使用文件操作类命令(2)。
21 1
|
3月前
熟练使用文件操作类命令
熟练使用文件操作类命令。
34 2
|
3月前
|
Linux
熟练使用文件操作类命令(3)
熟练使用文件操作类命令(3)。
42 2
|
5月前
|
存储
文件操作细致详解(下)
文件操作细致详解(下)
|
6月前
|
索引
简单粗暴的实现一下:文件操作!
简单粗暴的实现一下:文件操作!
22 0
|
7月前
|
C++
40.【C++最全文件操作,少一个你打我】(一)
40.【C++最全文件操作,少一个你打我】
57 0
|
7月前
|
C++
40.【C++最全文件操作,少一个你打我】(二)
40.【C++最全文件操作,少一个你打我】
25 0
|
分布式计算 Java Hadoop
HDFSAPI编程源码-文件写入
HDFSAPI编程源码-文件写入
|
API C语言 C++
C++文件操作的5种方式
C++文件操作的5种方式
128 1