文件
在C语言中,文件操作就是让程序能够读取(看)文件里的内容,或者把数据写入(存)到文件里。
可以把它想象成看书和写字:
读文件:像“看书”,程序打开文件,读取里面的内容。
写文件:像“写字”,程序往文件里写入新内容(可以覆盖旧内容,也可以追加到末尾)。
文件操作的基本步骤
无论是读还是写,操作文件的流程都类似:
打开文件(fopen)→ 就像“翻开书”或“拿一个新本子准备写”。
读/写文件(fread/fwrite 或 fscanf/fprintf)→ 看书内容或写字。
关闭文件(fclose)→ 合上书或保存本子,防止数据丢失。
绝对路径以盘符开始的
相对路径不以盘符开始的,相当于当前项目而言的
转义字符
路径是以字符串的形式来进行表示的
需求:我要打印一个双引号
”:表示字符串的开头或者结尾
此时,我要打印一个普普通通的双引号
\”:表示改变\后面这个符号原本的含义,把他变成一个普普通通的双引号
#include <stdio.h>
int main(int argc, char const *argv[])
{
char *file="D:\\download\\02-LinuxC\\03-Code";
printf("%s \n",file);
return 0;
}
读取数据(fgetc)
把本地文件中的数据,读到程序中来。
1.打开文件 fopen
2.读数据 fgetc fgets fread
fgetc一次读一个字符,读不到返回-1
fgets一次读一行,读不到返回null
fread 一次读多个
3.关闭文件
fclose
#include<stdio.h>
int main(int argc, char const *argv[])
{
FILE*file=fopen("a.txt","r");
int res;
while ((res=fgetc(file))!=-1)
{
printf("%c",res);
}
fclose(file);
return 0;
}
文件的读写模式
文件的读
fegetc
#include<stdio.h>
int main(int argc, char const *argv[])
{
FILE*file=fopen("a.txt","r");
int res;
while ((res=fgetc(file))!=-1)
{
printf("%c",res);
}
return 0;
}
fgets
fegts 细节:
每次读取一行数据,以换行符为准
如果读不到了,返回NULL
#include<stdio.h>
int main(int argc, char const *argv[])
{
FILE*file=fopen("a.txt","r");
char content[1024];
char* res;
while ( (res =fgets(content,sizeof(content),file))!=NULL)
{
printf("%s",res);
}
fclose(file);
return 0;
}
fread
英文的abc:占用1个字节中文:
window64位当中,默认2个字节
fread细节:在读取的时候每次尽可能会把数组给装满,返回当前读取到的有效字节个数在读取的时候,文件:100个字节
数组长度:30
第一次:读取前面30个字节,把数组给装满函数返回30
第二次:读取后面30个字节,把数组给装满,函数返回30
第三次:读取后面30个字节,把数组给装满,函数返回30
第四次:读取剩余的10个字节,会把数据放在数组当中,函数返回10
第五次:没有数据可以被读取了,函数返回0
在里面fread(content, 1, 个数,file)1是一个大小空间(一个单元)等于一次读一个单元
个数是总大小
#include <stdio.h>
int main(int argc, char const *argv[])
{
FILE *file = fopen("a.txt", "r");
char content[10];
int n;
while ((n = fread(content, 1, sizeof(content), file)) != 0)
{
for (int i = 0; i < n; i++)
{
printf("%c",content[i]);
}
}
return 0;
}
文件的写
fputc
#include <stdio.h>
int main(int argc, char const *argv[])
{
FILE *file = fopen("a.txt", "w");
char content[100];
int n;
n=fputc(97,file);
printf("%c",n);
return 0;
}
fputs
#include <stdio.h>
循环写入
void circulate() {
FILE *file = fopen("b.txt", "w");
if (file == NULL) {
perror("Failed to open file");
return 1;
}
char *messages[] = {"数据1\n", "数据2\n", "数据3\n"};
for (int i = 0; i < sizeof(messages); i++) {
fputs(messages[i], file); // 循环写入
}
fclose(file);
}
int main(int argc, char const *argv[])
{
FILE *file = fopen("a.txt", "w");
char content[100];
int n;
n=fputs("你好你好",file);
printf("%d",n);
return 0;
}
fwrite
#include <stdio.h>
int main(int argc, char const *argv[])
{
FILE *file = fopen("a.txt", "w");
int n;
char content[]={97,98,100,101};
n=fwrite(content,1,sizeof(content),file);//一次读多个,返回写出的字节个数
printf("%d\n",n);
return 0;
}
文件的拷贝
思路:先读后写
#include <stdio.h>
int main()
{
FILE *file = fopen("a.txt", "r");
FILE *file_Copy = fopen("b.txt", "w");
char *content;
char neirong[100];
while ((content = fgets(neirong,sizeof(neirong), file)) != NULL)
{
fputs(neirong,file_Copy);
}
fclose(file);
fclose(file_Copy);
return 0;
}