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:
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) ; }