FILE 类结构:
struct _iobuf {
char *_ptr; // 文件输入的下一个位置
int _cnt; // 当前缓冲区位置
char *_base; // 文件起始位置
int _flag; // 文件标志
int _file; // 文件有效性验证
int _charbuf; // 当前缓冲区状况
int _bufsiz; // 缓冲区大小
char *_tmpfname; // 临时文件名
};
typedef struct _iobuf FILE;
打开文件
fopen() 、fopen_s():
// 返回文件指针,打开失败返回 0。
fopen(
char *filename, // 文件全路径
char *mode // 打开方式(r/w/a/r+/w+/a+/t/b) 参考网址:http://c.biancheng.net/view/2054.html
);
// 成功返回 0,失败返回错误码。
fopen_s(
FILE** pFile, // 文件指针
const char *filename, // 文件全路径
const char *mode // 打开方式(同上)
);
读文件
fgets():
// 成功返回缓冲区指针,失败返回 NULL。
fgets(
char *str, // 接收文件内容的缓冲区指针
int n, // 读取的字节数
FILE *stream // 文件对象指针
);
读取 txt 中所有内容:
// 每行最大长度不得超过 1024 字节
FILE* f = fopen("Group.txt","r");
char buf[1024];
while(fgets(buf,1024,f)){
cout << buf << endl;
}
读取 txt 中的某一行:
// 每行最大长度不得超过 1024 字节
char* readLineChars(FILE* fp,int line){
char buf[1024];
for(int i=0;i<line;i++){
fgets(buf,1024,fp);
// 找到第 i 行
if(i == line-1){
// 去掉换行符
if(buf[strlen(buf)-1] == '\n'){
buf[strlen(buf)-1] = '\0';
}
// 移动文件指针到文件头
fseek(fp,0L,SEEK_SET);
return buf;
}
}
return "error";
}
获取 txt 行数:
// 每行最大长度不得超过 1024 字节
int getLineNum(FILE* fp){
int result = 0;
char buf_group[1024];
while(fgets(buf_group,1024,fp)){
result++;
}
// 移动文件指针到文件头
fseek(fp,0L,SEEK_SET);
return result;
}
写文件
fputs():
// 成功返回非负值,失败返回 EOF(-1)
fputs(
const char *str, // 要写入的字符串
FILE *stream // 指向 FILE 对象的指针
)