(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹
目录
C语言文件操作
1、打开文件
fopen
打开文件我们需要fopen函数,选中fopen然后按键盘F1键即可打开微软的MSDN数据库,下面就是MSDN中打开文件的几种方式:
我们用“r”来打开文件,复制文件的绝对地址后修改转义字符,并用if语句检测,最后关闭文件。
如果程序运行成功且并没有显示打开失败,则打开文件成功
#include<stdio.h> int main() { //打开文件 // \是转义字符,为了避免影响,这里使用\\ FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt","r"); if (fp == NULL) { printf("打开失败\n"); } //关闭文件 fclose(fp); return 0; }
2、读取文件
fgetc
读取文件我们可以用函数fgetc,fgetc函数一次只能读取一个文件,当文件全部读完后,它会返回EOF,所以我们可以用while循环实现一次性读取全部文件
int main() { //打开文件 // \是转义字符,为了避免影响,这里使用\\ FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt","r"); //fgetc读取完以后,会将文件指针移动到下一个字符 char ch = fgetc(fp);//读取第一个 printf("%c\n",ch); ch = fgetc(fp);//读取第二个 printf("%c\n", ch); while (EOF !=(ch = fgetc(fp)))//循环读取全部文件内容 { printf("%c",ch); } //关闭文件 fclose(fp); return 0; }
(我的文件内容为 )
输出为:
1
2
3456
abcdef
fgets
我们也可以用fgets函数读取文件,fgets函数一次可以读取一行,和fgetc一样,fgets读取完一行以后,会将文件指针移动到下一行
#include<stdio.h> int main() { //打开文件 // \是转义字符,为了避免影响,这里使用\\ FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt","r"); char str[200]; fgets(str, 200, fp); printf("%s\n", str);//读取第一行 fgets(str, 200, fp); printf("%s\n", str);//读取第二行 //关闭文件 fclose(fp); return 0; }
输出为:
123456
abcdef
fread
与上面两个函数相比,fread函数就显得更加方便,fread函数可以选择要读取的文件数量,用法如下:
fread( void *buffer, size_t size, size_t count, FILE *stream );
buffer
数据的存储位置。
size
项目大小(以字节为单位)。
count
要读取的项的最大数量。
stream
指向 FILE 结构的指针。
#include<stdio.h> int main() { //打开文件 // \是转义字符,为了避免影响,这里使用\\ FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt","r"); //fread函数可以读取任意数目的文件内容 char str[200] = { 0 }; //每个元素1个字节,读取10个这样的元素,返回实际读取的大小 fread(str, 1, 10, fp); printf("%s\n", str); //关闭文件 fclose(fp); return 0; }
输出为:
123456
abc
3、写入文件
fputc
fputc和fgetc用法相似,都是一次作用一个元素
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { //打开文件 // \是转义字符,为了避免影响,这里使用\\ FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt", "w"); //写入一个字符,清空写 fputc('a', fp);//第一个字符 fputc('b', fp);//第二个 fputc('c', fp);//第三个 //关闭文件 fclose(fp); return 0; }
文件内容就变成了
fputs
fputs函数一次可以写入一串字符
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { //打开文件 // \是转义字符,为了避免影响,这里使用\\ FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt", "w"); //写入字符串 const char * str="123456"; fputs(str, fp); //关闭文件 fclose(fp); return 0; }
文件内容就变成了
fwrite
fwrite函数与fread函数类似,可以写入任意数量的字符串
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> int main() { //打开文件 // \是转义字符,为了避免影响,这里使用\\ FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt", "w"); //fwrite函数 const char* str = "abcdefg"; fwrite(str, 1, strlen(str), fp); //关闭文件 fclose(fp); return 0; }
文件就变成了
4、文件定位
fseek
fseek函数可以用于定位元素在文件中的位置
可以使用 fseek 在文件的任何位置重新定位指针。 此外还可以在文件结尾外放置指针。
如下便是fseek函数的三种原始值用法:
#include<stdio.h> #include<string.h> int main() { //打开文件 // \是转义字符,为了避免影响,这里使用\\ FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt", "r+"); char str[200] = { 0 }; fseek(fp, 3, SEEK_SET);//定位第三个元素 fread(str, 1, 3, fp);//从第三个元素开始往后读取 printf("%s\n", str); //关闭文件 fclose(fp); return 0; }
(我的文件内容为 )
输出为:
456
char str[200] = { 0 }; fseek(fp, 3, SEEK_SET);//定位第三个元素为首元素 fread(str, 1, 3, fp);//从第三个元素开始往后读取3个元素 printf("%s\n", str); fseek(fp, 3, SEEK_CUR);//定位当前读到的位置,即第六个元素为首元素 fread(str, 1, 3, fp);//从当前位置开始往后读取3个元素 printf("%s\n", str);
输出为:
456
bcd
char str[200] = { 0 }; fseek(fp, -4, SEEK_END);//以倒数第三个元素为首元素地址 fread(str, 1, 3, fp);//从当前位置开始往后读取3个元素 printf("%s\n", str);
输出为:
cde
rewind
rewind函数可以重置文件指针,返回到文件的开头
ftell
ftell可以显示文件指针当前的位置
我们可以将两者结合来计算文件大小
#include<stdio.h> #include<string.h> int main() { //打开文件 // \是转义字符,为了避免影响,这里使用\\ FILE* fp = fopen("C:\\Users\\周星辰\\Desktop\\文件操作.txt", "r+"); //rewind函数可以重置文件指针,返回到文件的开头 rewind(fp); fseek(fp, 0, SEEK_END); int size = ftell(fp);//ftell可以显示文件指针当前的位置 printf("文件的大小:%d\n", size); //关闭文件 fclose(fp); return 0; }
输出为:
文件的大小:14