美文网首页
C/C++基础(4)

C/C++基础(4)

作者: 想起个帅气的头像 | 来源:发表于2020-09-28 22:49 被阅读0次

文件

文件句柄

typedef struct {
  short level;  //缓冲区满或空的状态
  unsigned flags;  //文件状态标志
  char  fd;  //文件描述符
  unsigned char hold; //如无缓冲区不读取字符
  short bsize;  //缓冲区的大小
  unsigned char *buffer;  //数据缓冲区的位置
  unsigned ar;  //指针,当前的指向
  unsigned istmp;  //临时文件,指示器
  short token;   //用于有效性的检查
}FILE;

文件操作api

fgetc fputc 按照字符读写文件
fgets fputs 按照行读写文件(读写配置文件)
fread fwrite 按照块读写文件(大数据块迁移)
fprintf fscanf 按照格式化进行读写文件

fopen() 打开文件
参数1: FILE 指针
参数2: 打开方式:r+ 追加读写; w+覆盖写读; r 只读; rb二进制只读; rt普通文本只读

fflush() 刷新缓冲取
fclose() 关闭文件

char buf[] = "this is a file";
FILE *fp = fopen("./file.txt", "w+"); //w+覆盖写
fputs(buf, fp);
fflush(fp);
fclose(fp);

基本操作

fputc('a', stdout);  //输出到标准输出
fputc('d', stderr);  //输出到标准错误输出
char ch = fgetc(stdin);  //从标准输入中获取
feof(fp);    //是否到结尾
fgets(buf, sizeof(buf), fp); //整行读取,sizeof(buf)表示读取的最大值,以\n作为换行符,读取完毕后,自动加字符串结束符0

块操作

typedef struct Student{
  char name[30];
  int age;
} Student;

FILE *fp = fopen("./file.txt", "w+");

Student s[3] = NULL;
char buf[30];
for(int  i=0;i<3;i++){
  sprintf(buf, "student_%d", i);
  strcpy(s[i].name, buf);    
}

//按块写文件
//s, 即将写入文件内容的内存首地址
//sizeof(Student)  单个块数据的大小
//3,  块数,写多少块数据
//fp,  文件指针
//返回值,成功写入文件的块数
int count = fwrite(s, sizeof(Student), 3, fp);

if (fp!=NULL) {
  fclose(fp);
  fp = NULL;
}

//按块读文件
//s, 读取文件内容的内存首地址
//sizeof(Student)  单个块数据的大小
//3,  块数,写多少块数据
//fp,  文件指针
//返回值,成功读取文件的块数
int count = fread(s, sizeof(Student), 3, fp);

文件光标位置切换

/**
*  fp 文件指针
*  offset  光标定位位置后的偏移量
*  whence  移动到哪个位置, SEEK_SET 光标定位到文件开头;SEEK_SET 光标定位到当前位置;SEEK_END 光标定位到文件结尾
*/
int fseek(FILE *fp, long offset, int whence); 
// fseek (fp, -10, SEEK_END);   //光标定位到文件结尾,然后向左偏移10个字节

/**
*  从开始到光标当前位置的字节数
*/
int ftell(FILE *fp);

/**
* 光标回到文件开始位置
*/
int rewind(FILE *fp);

相关文章

网友评论

      本文标题:C/C++基础(4)

      本文链接:https://www.haomeiwen.com/subject/ulsruktx.html