---
title: "C与C++文件操作"
author: "Perrin Yong"
author_profile: https://www.pystone.net/profile/
published_by: "Perrin Yong"
canonical: https://www.pystone.net/notes/c-cpp-file-io/
type: note
content_role: unspecified
visibility: public
id_stability: rename-stable
source_path: "10-计算机、信息技术与工程/02-编程语言与运行时/C++/C与C++文件操作.md"
content_hash: 3f87f908e3f67ef0eb77c8f055565597e188fbef562f1a38b3f8133e85743502
knowledge_version: 224c990773de.5fa8af6e39fa
site_commit: 224c990773de166d23a886306577dd90379529ce
notes_commit: 5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a
---
# C与C++文件操作

> 创建时间：2020/3/11 1:27

## cc++文件操作
### 流式文件操作

```cpp
string str1 = &quot;test&quot;;
string str2 = &quot;test&quot;;

```

> fopen() 打开流
>  fclose() 关闭流
>  fputc() 写一个字符到流中
>  fgetc() 从流中读一个字符
>  fseek() 在流中定位到指定的字符
>  fputs() 写字符串到流
>  fgets() 从流中读一行或指定个字符
>  fprintf() 按格式输出到流
>  fscanf() 从流中按格式读取
>  feof() 到达文件尾时返回真值
>  ferror() 发生错误时返回其值
>  rewind() 复位文件定位器到文件开始处
>  remove() 删除文件
>  fread() 从流中读指定个数的字符
>  fwrite() 向流中写指定个数的字符
>  tmpfile() 生成一个临时文件流
>  tmpnam() 生成一个唯一的文件名

  1. FILE *fopen(const char *filename,const char *mode)，fopen实现三个功能
"r" 以只读方式打开文件
"w" 以只写方式打开文件
"a" 以追加方式打开文件
"r+" 以读/写方式打开文件，如无文件出错
"w+" 以读/写方式打开文件，如无文件生成新文件

```cpp
string str1 = &quot;test&quot;;
string str2 = &quot;test&quot;;

```
  2. int fclose(FILE *fp);
如果成功，返回0,失败返回EOF
在程序结束时一定要记得关闭打开的文件，不然可能会造成数据丢失的情况，我以前就经常犯这样的毛病。
  3. int fputc(int c, FILE *stream);
  4. int fputc(FILE *stream);
  5. int fseek(FILE *stream, long offset, int whence);
一般用于二进制模式打开的文件中，功能是定位到流中指定的位置
参数offset是移动的字符数，whence是移动的基准，取值是
符号常量 值 基准位置
SEEK_SET 0 文件开头
SEEK_CUR 1 当前读写的位置
SEEK_END 2 文件尾部
  6. int fputs(const char *s, FILE *stream);

> 详细参考：https://blog.csdn.net/hbqjzx/article/details/86525693

### 直接I/O文件操作

通过直接存/取文件来完成对文件的处理，而上篇所说流式文件操作是通过缓冲区来进行；流式文件操作是围绕一个FILE指针来进行，而此类文件操作是围绕一个文件的"句柄"来进行，什么是句柄呢？它是一个整数，是系统用来标识一个文件(在WINDOWS中，句柄的概念扩展到所有设备资源的标识)的唯一的记号。
这些函数及其所用的一些符号在 **io.h** 和 **fcntl.h** 中定义

> open() 打开一个文件并返回它的句柄
>  close() 关闭一个句柄
>  lseek() 定位到文件的指定位置
>  read() 块读文件
>  write() 块写文件
>  eof() 测试文件是否结束
>  filelength() 取得文件长度
>  rename() 重命名文件
>  chsize() 改变文件长度

> 详细参考：https://blog.csdn.net/hbqjzx/article/details/86525693

## C++
