一. fopen、fwrite、fread、fseek
- #include<stdio.h>
1. fopen
- 原型:FILE * fopen(const char * path,const char * mode);
- path是绝对路径,可以是绝对路径,也可以是相对路径。
- Windows下绝对路径要这么写:"C:\\test\\test"
- mode有以下几种选择:
r | 打开只读文件,该文件必须存在 |
r+ | 打开可读写的文件,该文件必须存在 |
w | 打开只写文件,若文件存在则清空重写。若文件不存在则建立该文件。 |
w+ | 打开可读写文件,若文件存在则清空内容。若文件不存在则建立该文件。 |
a | 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾。 |
a+ | 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后。 |
b | 可以和上面的组合,表示操作二进制文件 |
t | 可以和上面的组合,表示操作文本文件 |
2. fread \ fwrite
- size_t fread(void* ptr,size_t size,size_t nmemb,FILE* stream)
- fread 和fwrite 的函数原型都差不多
- ptr:读入/写入的buffer
- size:每次读取/写入的数据大小
- nmemb:读取/写入的次数
- stream:上面fopen返回的FILE指针
- 返回值:成功返回nmemb,返回<=0时表示已经没有可写/可读的数据,或者读写失败。
3. fclose
- 写完数据后要调用fclose()关闭流,不关闭流的情况下,每次读或写数据后,文件指针都会指向下一个待写或者读数据位置的指针。
4. fprintf
- int fprintf(FILE *stream, const char *format, ...)
- 用法和printf相似
5. fgets
- char * fgets(char * s, int n,FILE *stream);
- 参数:
st -- 这是指向一个字符数组的指针,该数组存储了要读取的字符串。
n -- 这是要读取的最大字符数(包括最后的空字符)。通常是使用以 str 传递的数组长度。
stream -- 这是指向 FILE 对象的指针,该 FILE 对象标识了要从中读取字符的流。 - fgets一般会读取一行,但要注意,读取进来的不会自动处理掉\n,所以要记得处理。
6. 读写一行代码参考:
二. C++
- C++在头文件fstream 中定义了多个新类,包含用于文件输入的ifstream 和用于文件输出的ofstream类。C++还定义了一个fstream类,用于同步文件I/O。
- ofstream的使用:
①创建类:ofstream fout; 或者 ofstream fout("jar.txt");
②打开文件:fout.open("jar.txt");
③写入:fout<<"test";
④关闭:fout.close();
⑤检查是否打开:fout.is_open(); - ifstream的使用(类似ofstream):
①创建类:ifstream fin; 或者 ifstream fin("jar.txt");
②打开文件:fin.open("jar.txt");
③写入:fin>>ch; (char ch;)或者 fin>>buf; (char buf[80];)或者 getline(fin,line); (string line;)
④关闭:fin.close(); - 和C一样,C++也可以在打开文件时指定文件模式:ifstream("text",mode); 或 ofstream fout; fout.open("text",mode);
- ios_base定义了一个openmode类型(可以多个同时使用,用|隔开):
ios_base::in | 打开文件,以便读取 |
ios_base::out | 打开文件,以便写入 |
ios_base::ate | 打开文件,并移动到文件尾 |
ios_base::app | 追加到文件尾 |
ios_base::trunc | 如果文件存在,则截短文件 |
ios_base::binary | 二进制文件 |