文件:
文件的分类:
文本文件: 一打开就能看懂的文件
二进制文件:一打开是乱码的东西,或者说全是二进制数字的文件叫二进制文件。
文件流:就是将文件一段一段的加载,然后进行读取,比如看电视下面的加载栏
文件操作的步骤:
打开文件
操作文件
关闭文件
怎么用代码的方式打开文件?
fopen函数:
fopen(路径,操作方式)
路径:
绝对路径:文件的全路径
相对路径:相对于文件当前的路径
r: 只读,如果文件不存在,那就返回NULL
w: 只写,如果文件存在,则会覆盖原来的文件,如果不存在,则会创建。
a: 追加,如果文件存在,则会在后面追加原来的文本内容,如果文件不存在,则会创建。(不管存在,不存在最终都会返回文本指针)
r+: 只是在r的基础上增加了写的功能
w+: 只是在w的基础上增加了读的功能
a+: 只是在a的基础上增加了读的功能
t: 文本文件
b: 二进制文件
注意:在MAC或linux或UNIX下,文本文件和二进制文件是一样的
在windows下有区别,写入的是文本文件,会把所有的\n替换成\r\n,二进制文件不会替换。
2)几个函数的使用方法:
fgetc与fputc函数
fgetc函数:读取一个字符
fputc函数:写入一个字符
#include
#include
void writeTest(){
/* FILE *fp=fopen("/Users/huanglichao/Desktop/3.txt", "w");
if (fp !=NULL) {
char str[50]="hello";
unsigned long len=strlen(str);
for (int i=0; i fputc(str[i], fp); //用循环的方式写入字符,不用一个一个的写。 } fclose(fp); } */ } int main(int argc, const char * argv[]) { FILE *fp=fopen("/Users/huanglichao/Desktop/3.txt", "r"); if (fp !=NULL) {// NULL 就是 0 16进制0x0 // char str[50]={0}; // fgets(str, 3, fp); //这里的3 实际还要留一个空格给'\0',所以读取的是he。 // //用循环怎么读取呢 // 这是一个手动的读取部分 // printf("%s",str); // while(1){ char ch =fgetc(fp); if (ch==EOF) { //EOF是结束符 break; } printf("%c",ch); } fclose(fp); } return 0; } 3)fgets 和fputs的使用 fgets 和 fputs 函数 fgets :读取一个字符串 fputs: 输入一个字符串 #include int main(int argc, const char * argv[]) { /*FILE *fp=fopen("/Users/huanglichao/Desktop/3.txt", "w"); if (fp) { //fp为真,则继续往下执行 仔细剖析 fp !=NULL char str[50]="aksjfk"; fputs(str, fp); printf("%s\n",str); fclose(fp); } */ //写入字符串 FILE *fp=fopen("/Users/huanglichao/Desktop/3.txt", "r"); if (fp) { //fp为真,则继续往下执行 仔细剖析 fp !=NULL // char str[50]={0}; // fgets(str,4, fp);//这里的4,实际得到是3,要留一个位置给'\0'。 // // printf("%s\n",str); // 怎么用循环的方式读取字符串 返回0 代表字符串还未到末尾 //这里feof(fp) 返回1 代表字符串到末尾 while(1){ if (feof(fp)) { break; } char str[50];//这里的字符串每次都会被覆盖,可以用断点查看。 fgets(str, 10, fp); printf("%s",str); } fclose(fp); } return 0; } fprintf (变量指针,"格式控制符",参数列表) fscanf(变量指针,"格式控制符",地址列表) #include void testFprintf(){ FILE * fp = fopen("/Users/ios001/Desktop/1.txt", "w"); if (fp) { fprintf(fp, "%d",99); fclose(fp); } } int main(int argc, const char * argv[]) { fprintf(stdout, "哈哈哈哈哈\n"); //跟printf没差别,stdout代表在控制台输出 int num; fscanf(stdin, "%d",&num); //stdin在控制台输入 printf("num=%d\n",num); /* FILE * fp = fopen("/Users/ios001/Desktop/1.txt", "r"); if (fp) { // int num; // char ch; // fscanf(fp, "%c帅%d",&ch,&num); // // printf("ch=%c num=%d\n",ch,num);//a 99 char str[50] = {0}; char str2[50]; fscanf(fp, "%s\n%s",str,str2); puts(str); puts(str2); fclose(fp); } */ return 0; } 5)fread 和write函数的使用: // fread和fwrite函数 #include #include int main(int argc, const char * argv[]) { // FILE *fp =fopen("/Users/huanglichao/Desktop/3.txt", "r"); // if (fp) { // char str[50]={0}; // fread(str, 1, 100, fp); 它只关心具体读的字节数,不会关心这些自己里面有没有换行 // printf("%s",str); // 读 FILE *fp =fopen("/Users/huanglichao/Desktop/3.txt", "w"); if (fp) { char str[50]="你妈的就阿卡哈"; unsigned long len=strlen(str); fwrite(str,1 , len, fp);//最好不要写太大,因为有垃圾值在其中,文件就打不开了 printf("oubasang\n"); fclose(fp); } return 0; }