Loading docs/basic/file-operation.md +63 −4 Original line number Diff line number Diff line Loading @@ -11,6 +11,12 @@ C/C++ 将文件分为文本文件和二进制文件。文本文件就是简单 ## `freopen` 函数 ### 函数简介 函数用于将指定输入输出流以指定方式重定向到文件,包含于头文件 `stdio.h (cstdio)` 中,该函数可以在不改变代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的 函数主要有三种方式:读、写和附加 ### 命令格式 ```cpp Loading @@ -20,8 +26,25 @@ FILE* freopen(const char* filename, const char* mode, FILE* stream); ### 参数说明 - `filename` : 要打开的文件名 - `mode` : 文件打开的模式 - `stream` : 文件指针,通常使用标准文件流 ( `stdin/stdout/stderr` ) - `mode` : 文件打开的模式,表示文件访问的权限 - `stream` : 文件指针,通常使用标准文件流 ( `stdin/stdout` ) 或标准错误输出流 (`stderr`) - 返回值:文件指针,指向被打开文件 ### 文件打开格式(选读) - `r`:以只读方式打开文件,文件必须存在,只允许读入数据**(常用)** - `r+`:以读 / 写方式打开文件,文件必须存在,允许读写数据 - `rb`:以只读方式打卡二进制文件,文件必须存在,只允许读入数据 - `rb+`:以读写方式打开二进制文件,文件必须存在,允许读写数据 - `rt+`:以读写方式打开文本文件,允许读写 - `w`:以只写方式打开文件,文件不存在会新建文件,否则清空内容,只允许写入数据**(常用)** - `w+`:以读 / 写方式打开文件,文件不存在将新建文件,否则清空内容,允许读写数据 - `wb`:以只读方式打开二进制文件,文件不存在将会新建文件,否则清空内容,只允许写入数据 - `wb+`:以读写方式打开二进制文件,文件不存在将新建文件,否则清空内容,允许读写数据 - `a`:以附加方式打开只写文件,文件不存在将新建文件,写入数据将被附加在文件末尾(保留EOF符) - `a+`:以附加方式打开只写文件,文件不存在将新建文件,写入数据将被附加在文件末尾(不保留EOF符) - `at+`:以读写方式打开文本文件,写入数据将被附加在文件末尾 - `ab+`:以读写方式打开二进制文件,写入数据将被附加在文件末尾 ### 使用方法 Loading @@ -46,6 +69,8 @@ fclose(stdin); fclose(stdout); ``` !!! 注 `printf/scanf/cin/cout`等函数默认使用 `stdin/stdout`,将 `stdin/stdout`重定向后,这些函数将输入 / 输出到被定向的文件 ### 模板 ```cpp Loading @@ -65,6 +90,40 @@ int main(void) { 参考书目:信息学奥赛一本通 ## `fopen`函数(选读) 函数大致与 `freopen` 相同,函数将打开指定文件并返回打开文件的指针 ### 函数原型 ```cpp FILE * fopen(const char * path, const char * mode) ``` 各项参数含义同 `freopen` ### 可用读写函数(基本) - `fread/fwrite` - `fgetc/fputc` - `fscanf/fprintf` - `fgets/fputs` ### 使用方式 ```cpp FILE *in, *out; // 定义文件指针 in = fopen("data.in", "r"); out = fopen("data.out", "w"); /* do what you want to do */ fclose(stdin); fclose(stdout); ``` ## C++ 的 `ifstream/ofstream` 文件输入输出流 ### 使用方法 Loading @@ -73,14 +132,14 @@ int main(void) { ```cpp ifstream fin("data.in"); // data.in 就是读取的文件名,要和可执行文件放在同一目录下 // data.in 就是读取文件的相对位置或绝对位置 ``` 输出到文件: ```cpp ofstream fout("data.out"); // data.out 就是输出文件的文件名,和可执行文件在同一目录下 // data.out 就是输出文件的相对位置或绝对位置 ``` 关闭标准输入/输出流 Loading Loading
docs/basic/file-operation.md +63 −4 Original line number Diff line number Diff line Loading @@ -11,6 +11,12 @@ C/C++ 将文件分为文本文件和二进制文件。文本文件就是简单 ## `freopen` 函数 ### 函数简介 函数用于将指定输入输出流以指定方式重定向到文件,包含于头文件 `stdio.h (cstdio)` 中,该函数可以在不改变代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的 函数主要有三种方式:读、写和附加 ### 命令格式 ```cpp Loading @@ -20,8 +26,25 @@ FILE* freopen(const char* filename, const char* mode, FILE* stream); ### 参数说明 - `filename` : 要打开的文件名 - `mode` : 文件打开的模式 - `stream` : 文件指针,通常使用标准文件流 ( `stdin/stdout/stderr` ) - `mode` : 文件打开的模式,表示文件访问的权限 - `stream` : 文件指针,通常使用标准文件流 ( `stdin/stdout` ) 或标准错误输出流 (`stderr`) - 返回值:文件指针,指向被打开文件 ### 文件打开格式(选读) - `r`:以只读方式打开文件,文件必须存在,只允许读入数据**(常用)** - `r+`:以读 / 写方式打开文件,文件必须存在,允许读写数据 - `rb`:以只读方式打卡二进制文件,文件必须存在,只允许读入数据 - `rb+`:以读写方式打开二进制文件,文件必须存在,允许读写数据 - `rt+`:以读写方式打开文本文件,允许读写 - `w`:以只写方式打开文件,文件不存在会新建文件,否则清空内容,只允许写入数据**(常用)** - `w+`:以读 / 写方式打开文件,文件不存在将新建文件,否则清空内容,允许读写数据 - `wb`:以只读方式打开二进制文件,文件不存在将会新建文件,否则清空内容,只允许写入数据 - `wb+`:以读写方式打开二进制文件,文件不存在将新建文件,否则清空内容,允许读写数据 - `a`:以附加方式打开只写文件,文件不存在将新建文件,写入数据将被附加在文件末尾(保留EOF符) - `a+`:以附加方式打开只写文件,文件不存在将新建文件,写入数据将被附加在文件末尾(不保留EOF符) - `at+`:以读写方式打开文本文件,写入数据将被附加在文件末尾 - `ab+`:以读写方式打开二进制文件,写入数据将被附加在文件末尾 ### 使用方法 Loading @@ -46,6 +69,8 @@ fclose(stdin); fclose(stdout); ``` !!! 注 `printf/scanf/cin/cout`等函数默认使用 `stdin/stdout`,将 `stdin/stdout`重定向后,这些函数将输入 / 输出到被定向的文件 ### 模板 ```cpp Loading @@ -65,6 +90,40 @@ int main(void) { 参考书目:信息学奥赛一本通 ## `fopen`函数(选读) 函数大致与 `freopen` 相同,函数将打开指定文件并返回打开文件的指针 ### 函数原型 ```cpp FILE * fopen(const char * path, const char * mode) ``` 各项参数含义同 `freopen` ### 可用读写函数(基本) - `fread/fwrite` - `fgetc/fputc` - `fscanf/fprintf` - `fgets/fputs` ### 使用方式 ```cpp FILE *in, *out; // 定义文件指针 in = fopen("data.in", "r"); out = fopen("data.out", "w"); /* do what you want to do */ fclose(stdin); fclose(stdout); ``` ## C++ 的 `ifstream/ofstream` 文件输入输出流 ### 使用方法 Loading @@ -73,14 +132,14 @@ int main(void) { ```cpp ifstream fin("data.in"); // data.in 就是读取的文件名,要和可执行文件放在同一目录下 // data.in 就是读取文件的相对位置或绝对位置 ``` 输出到文件: ```cpp ofstream fout("data.out"); // data.out 就是输出文件的文件名,和可执行文件在同一目录下 // data.out 就是输出文件的相对位置或绝对位置 ``` 关闭标准输入/输出流 Loading