c--文件读写--文本读写_二进制文件

#include <stdio.h>

int main()
{
FILE *fp=fopen("ss.txt","r"); //打开文件并创建文件指针
//实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息
//在进行读写操作之前要先打开,使用完毕要关闭
//在打开一个文件时,如果出错,fopen将返回一个空指针值NULL
/*
r(read): 只读
r+ : 打开读写,从文件头开始
w(write): 只写,如果存在则清空,如果不存在则新建
w+ : 打开可读/写文件,如果存在则清空,如果不存在则新建
a(append): 追加,以附加方式打开只写文件,如果不存在则新建,如果文件存在则文件尾开始--只写
   a+ :以附加方式打开可写/读文件,如果不存在则新建,如果文件存在则文件尾开始
t(text): 文本文件,可省略不写
b(banary): 二进制文件
x : 只新建,如果文件已经存在则不能打开
“rt”      只读打开一个文本文件,只允许读数据
“wt”      只写打开或建立一个文本文件,只允许写数据
“at”      追加打开一个文本文件,并在文件末尾写数据
“rb”      只读打开一个二进制文件,只允许读数据
“wb”       只写打开或建立一个二进制文件,只允许写数据
“ab” 追加打开一个二进制文件,并在文件末尾写数据
“rt+”      读写打开一个文本文件,允许读和写
“wt+”      读写打开或建立一个文本文件,允许读写
“at+”      读写打开一个文本文件,允许读,或在文件末追加数 据
“rb+”      读写打开一个二进制文件,允许读和写
“wb+”      读写打开或建立一个二进制文件,允许读和写
“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据 */

if(fp){ int num,num1; fscanf(fp,"%d",&num); //从文件中读取格式化输入

//从文件中读取一个数,放到num变量中

//移动文件指针
printf("%d\n",num);

int n=fclose(fp) ;//关闭文件

//正常完成关闭文件操作时,fclose函数返回值为0。如返回非零值则表示有错误发生
}

else{
printf("%s\n","文件没有打开"); }

return 0; }

fscanf说明:

格式:int fscanf(FILE *stream, const char *format, ...)  

返回值:如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF

 参数1:FILE *stream   文件指针

参数2:const char *format

格式:%[*][width][modifiers]type]

*       : 这是一个可选的星号,表示数据是从流 stream 中读取的,但是可以被忽视

width:     读取的最大字符数

modifiers :为对应的附加参数所指向的数据指定一个不同于整型(针对 d、i 和 n)、无符号整型(针对 o、u 和 x)或浮点型(针对 e、f 和 g)的大小: h :短整型(针对 d、i 和 n),或无符号短整型(针对 o、u 和 x) l :长整型(针对 d、i 和 n),或无符号长整型(针对 o、u 和 x),或双精度型(针对 e、f 和 g) L :长双精度型(针对 e、f 和 g)

type:

c--文件读写--文本读写_文本文件_02

int c=fgetc(fp);//读取一个字符(一个无符号字符),并把位置指针往前移动
//返回读取的字符ASCii码,如果到达文件末尾或发生读错误,则返回 EOF
printf("%c\n",c);
#include <stdio.h>

int main()
{
FILE *fp=fopen("ss.txt","w+");

if(fp){

fprintf(fp, "%s %s %s %d", "We", "are", "中国人", 1968);//写文件


int n=fclose(fp) ;

}
else{
printf("%s\n","文件没有打开");
}


return 0;
}

fprintf说明:格式   int fprintf(FILE *stream, const char *format, ...)

把内容写到文件

看  https://www.runoob.com/cprogramming/c-function-fprintf.html  

#include <stdio.h>

int main(void){
int a[]={10,20,30,40,50,60,70,80};
FILE *fp=fopen("ss.txt","w+");
int len=sizeof(a)/sizeof(a[0]);
if (fp){

unsigned long num=fwrite(a, sizeof(a[0]), len, fp);//向流steam写数据
/*
参数1:要写入的数组指针
参数2:要被写入的每个元素的大小,以字节为单位-unsigned long
参数3:元素的个数-unsigned long
参数4:文件指针
返回值:失败返回-1;成功返回写入的数据个数;
*/
printf("写了%d个数据\n",num);
//int n=fclose(fp) ;

}
else{
printf("文件打开失败--写\n");
}


int b[8];
rewind(fp) ;//设置读写指针到文件的开头
unsigned long num= fread(b, sizeof(int), 8, fp);//读取数据
/*
参数1:用来保存数据的char*;注意大小要大于等于读取的字节数
参数2:要读取的每个元素的大小,以字节为单位
参数3:元素的个数
参数4:文件指针
返回值:失败返回-1;成功返回读取的数据个数
*/

for (int i=0;i<8;i++){
printf("b[%d]=%d\n",i,b[i]);
}
printf("读了%d个数据\n",num);




int n=fclose(fp) ;

}