1.打开文件 2.操作文件 3.关闭文件


文件打开:
#include <time.h>
#include <errno.h>
#include "c3.h"
int main(int argc, char *argv[]) {
//打开文件
//文本模式:
//第一个参数文件路径,第二次参数打开方式 r w a
// r/rt:只读 文件必须得存在。
// w:可读可写(擦除写)原来的内容没有了,重新写新的数据。文件不存在,会创建文件。
// a:可读可写(接着写)如果文件有内容,会在原有的内容尾巴上接着写。文件不存在的时候会创建文件
// r+:可读可写。 文件必须得存在。「就是比r多了个可写」
// w+:跟w一样
// a+:跟a一样
//二进制模式
// rb:只读 文件必须得存在。
// wb:可读可写(擦除写)原来的内容没有了,重新写新的数据。文件不存在,会创建文件。
// ab:可读可写(接着写)如果文件有内容,会在原有的内容尾巴上接着写。文件不存在的时候会创建文件
// r+b/rb+:可读可写。 文件必须得存在。「就是比rb多了个可写」
// w+b/wb+:跟wb一样
// a+b/ab+:跟ab一样
FILE *pFILE = fopen("../语言学习.docx", "r");
if (pFILE == NULL) {
printf("文件打开失败");
}
int a = errno; //官方给的文件错误码。在文件代码之后调用,出错就会返回错误码
return 0;
}
fwrite写:
fwrite(str, sizeof(char), strlen(str) + 1, pFILE);
#include <time.h>
#include <errno.h>
#include "c3.h"
int main(int argc, char *argv[]) {
//打开文件 w a
FILE *pFILE = fopen("../C语言学习.docx", "w");
if (pFILE == NULL) {
printf("文件打开失败");
}
//写
char *str = "hahahahah~";
//-----换行用字符
//char str1='\n'
//fwrite(&str1, sizeof(char), 1, pFILE);
//-----换行用字符串
//文本模式的时候换行是\n,二进制模式换行是\r\n
//FILE *pFILE = fopen("../C语言学习.docx", "wb")的时候:
//char *str3 = "\r\n";
char *str3 = "\n";
char *str2 = "heiheiheihei~";
//strlen(str)+1 把'\0'写进去
//如果操作失败会返回0。
fwrite(str, sizeof(char), strlen(str) + 1, pFILE);
fwrite(str3, sizeof(char), strlen(str3), pFILE);
fwrite(str2, sizeof(char), strlen(str2) + 1, pFILE);
//文件关闭 保存
fclose(pFILE);
return 0;
fread读文件
#include <time.h>
#include <errno.h>
#include "c3.h"
int main(int argc, char *argv[]) {
//打开文件 w a
FILE *pFILE = fopen("../C语言学习.docx", "r");
if (pFILE == NULL) {
printf("文件打开失败");
}
char str[20] = {0};
//fread读文件只能用r 或者a ,w不能用,因为w是擦除写
//参数1:字符数组或者malloc空间
//参数2*参数3:一次性读出的字节数
//参数4:文件指针
//返回值:读的字节数超过文件里面的已有字节数,返回0,
//没有字符的时候:返回0
//返回值返回实际读出的字节数:读的过程中没有出现错误。
// int a = fread(str, sizeof(char), 2, pFILE);
int a;
while (a = fread(str, sizeof(char), 2, pFILE)) {
printf(str);
//避免最后只剩下一个字符了,但是要读两个数据,其中一个是内存里面的有数据,但是文件里面没数据了
//导致 读出来多一个字符
str[0] = 0;
str[1] = 0;
}
//fread读:行结尾
//文本模式\n 二进制模式是\r\n。对应读fwrite换行。
//考虑到移植性,用文本模式。因为linux 二进制只有\n,没有\r\n
//
//fread读 文件结尾: feof(pFILE); 判断文件是否到文件结尾了
//feof(pFILE)到结尾返回1,没到结尾返回0
//所以上面到代码,可以写成
while (!feof(pFILE)) {
a = fread(str, sizeof(char), 2, pFILE);
printf(str);
str[0] = 0;
str[1] = 0;
}
//文件关闭 保存
fclose(pFILE);
return 0;
}
fread和fwrite读写结构体「只有他俩能读写结构体」
#include <time.h>
#include <errno.h>
#include "c3.h"
struct Node {
int num;
char name[10];
double height;
short age;
};
int main(int argc, char *argv[]) {
struct Node node = {110011, "xiaoxiao", 160, 27};
//打开文件 w a
FILE *pFILE = fopen("../C语言学习.docx", "w");
if (pFILE == NULL) {
printf("文件打开失败");
}
//写
fwrite(&node, sizeof(node), 1, pFILE);
//写完记得保存关闭
fclose(pFILE);
//读
struct Node node2;
FILE *pFILE2 = fopen("../C语言学习.docx", "r");
while (!feof(pFILE2)) {
fread(&node2, sizeof(node2), 1, pFILE2);
}
//文件关闭 保存
fclose(pFILE2);
node2.name;
return 0;
}

fputs() 和 fgets()
按行操作。
这两个只能放字符串地址。fread和fwrite可以放任何地址。所以不能写结构体
#include <time.h>
#include <errno.h>
#include "c3.h"
int main(int argc, char *argv[]) {
//写
//打开文件 w a
FILE *pFILE = fopen("../C语言学习.docx", "w");
//成功返回0,失败返回-1
fputs("hello fputs 111111\n", pFILE); //换行\n fputs不会主动换行
fputs("by xiaoxiao", pFILE);
fclose(pFILE);
//读
//打开文件 w a
FILE *pFILE2 = fopen("../C语言学习.docx", "r");
//定义大于一行读长度
char str[30] = {0};
while (!feof(pFILE2)) {
fgets(str, 30, pFILE2);//读一行
printf("%s", str);
}
fclose(pFILE2);
return 0;
}
结果
hello fputs 111111
by xiaoxiao
fscanf()和fprintf()
int main(int argc, char *argv[]) {
//写
//打开文件 w a
FILE *pFILE = fopen("../C语言学习.docx", "w");
fprintf(pFILE, "%d %.1lf %s", 12, 33.4, "hello xiao"); //用空格
fclose(pFILE);
//读
FILE *pFILE2 = fopen("../C语言学习.docx", "r");
int a = 0;
char str[20] = {0};
double d = 1.2;
fscanf(pFILE2, "%d %1f %s,", &a, &d, str);//格式跟写必须一样
fclose(pFILE2);
return 0;
}
fseek和ftell
fseek设置文件指针对位置

#include <time.h>
#include <errno.h>
#include "c3.h"
int main(int argc, char *argv[]) {
//打开文件 w a
FILE *pFILE = fopen("../C语言学习.docx", "r");
char str[20] = {0};
fread(str, 1, 4, pFILE);
fseek(pFILE, 3L, SEEK_CUR);//SEEK_CUR SEEK_END
fread(str, 1, 4, pFILE);
fclose(pFILE);
return 0;
}
ftell()返回指针当前的位置
int a=ftell(pFILE);//当前的位置的下标
#include <time.h>
#include <errno.h>
#include "c3.h"
int main(int argc, char *argv[]) {
FILE *pFILE = fopen("../C语言学习.docx", "r");
char str[20] = {0};
fread(str, 1, 4, pFILE);
//fseek指向结尾,然后通过ftell就能知道文件的字符数
fseek(pFILE, 0L, SEEK_END);
int a=ftell(pFILE);
fclose(pFILE);
return 0;
}
fcose()
关闭文件,更新到文件中,将空间释放。
网友评论