C/C++文件操作指南
- 问题描述:
- C语言实现方法:
- 文件操作方法
- 文件打开模式
- 代码实现
- C++实现方法:
- 文件操作方法
- 文件打开模式
- 代码实现
问题描述:
给程序目录下a.txt文件写入2行hello world,第三行写入1-9的数字并用空格隔开,最后读取其中的内容输出,创建b.txt文件并赋值a.txt的文件到b.txt文件中,最后删除a.txt文件
C语言实现方法:
文件操作方法
提供的操作函数
fopen() 打开流
fclose() 关闭流
fputc() 写一个字符到流中
fgetc() 从流中读一个字符
fseek() 在流中定位到指定的字符
fputs() 写字符串到流
fgets() 从流中读一行或指定个字符
fprintf() 按格式输出到流
fscanf() 从流中按格式读取
remove() 删除文件
feof() 文件尾判断
文件打开模式
r 以只读方式打开文件,只允许读取,不允许写入,文件必须存在
r+ 以读/写方式打开文件,允许读取和写入。该文件必须存在。
rb+ 以读/写方式打开一个二进制文件,允许读/写数据。
rt+ 以读/写方式打开一个文本文件,允许读和写。
w 以只写方式打开文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件。
w+ 以读/写方式打开文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以追加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF符保留)。
a+ 以追加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的EOF符 不保留)。
wb 以只写方式打开或新建一个二进制文件,只允许写数据。
wb+ 以读/写方式打开或建立一个二进制文件,允许读和写。
wt+ 以读/写方式打开或建立一个文本文件,允许读写。
at+ 以读/写方式打开一个文本文件,允许读或在文本末追加数据。
ab+ 以读/写方式打开一个二进制文件,允许读或在文件末追加数据。
代码实现
#include <stdio.h>
int main(int argc, char **argv)
{
// 定义文件指针并通过读写方式打开a.txt文件
FILE *wfile;
char _str[] = "hello world\r\n";
if ((wfile = fopen("a.txt", "wb")) == NULL)
{
printf("file open error a.txt\n");
return 0;
}
// 写字符串到流 "hello world"
fputs(_str, wfile);
// 格式化方式写入"hello world"
fprintf(wfile, "%s", _str);
// 单个字符写入 1 - 10
for (int i = 1; i <= 10; i++)
{
fputc(i + 47, wfile);
fputc(' ', wfile);
}
// 关闭文件 释放文件指针
fclose(wfile);
// 文件读取
FILE *ofile;
if ((ofile = fopen("a.txt", "r")) == NULL)
{
printf("file open error a.txt\n");
return 0;
}
// 向控制台打印文件
char buff[1024];
while (!feof(ofile))
{
fgets(buff, sizeof(buff), ofile);
printf("%s", buff);
}
fclose(ofile);
// 把a.txt的内容写入到b.txt
FILE *afile;
if ((afile = fopen("a.txt", "r")) == NULL)
{
printf("file open error a.txt\n");
return 0;
}
// 创建b文件
FILE *bfile;
if ((bfile = fopen("b.txt", "wt+")) == NULL)
{
printf("file open error b.txt\n");
return 0;
}
while (!feof(afile))
{
fgets(buff, sizeof(buff), afile);
fputs(buff, bfile);
}
fclose(afile);
fclose(bfile);
// 删除a文件
remove("a.txt");
return 0;
}
C++实现方法:
文件操作方法
fstream --提供了三个类,用来实现c++对文件的操作(文件的创建、读、写)
ifstream -- 从已有的文件读入
ofstream -- 向文件写内容
fstream -- 打开文件供读写
good() 如果文件打开成功
bad() 打开文件时发生错误
eof() 到达文件尾
file.seekg(0,ios::beg); //让文件指针定位到文件开头
file.seekg(0,ios::end); //让文件指针定位到文件末尾
file.seekg(10,ios::cur); //让文件指针从当前位置向文件末方向移动10个字节
file.seekg(-10,ios::cur); //让文件指针从当前位置向文件开始方向移动10个字节
file.seekg(10,ios::beg); //让文件指针定位到离文件开头10个字节的位置
文件打开模式
ios::in 只读
ios::out 只写
ios::app 从文件末尾开始写,防止丢失文件中原来就有的内容
ios::binary 二进制模式
ios::trunc 打开一个文件,然后清空内容
ios::ate 打开一个文件时,将位置移动到文件尾
代码实现
#include <iostream>
#include <fstream> //读取文件的头文件
#include <string>
using namespace std;
int main(void)
{
char _str[] = "hello world";
// 打开a.txt文件
fstream afile("a.txt", ios::out);
if (!afile.is_open())
{
cout << "打开文件失败" << endl;
return 0;
}
// 写入数据
afile << _str;
afile << endl;
afile << _str;
afile << endl;
for (int i = 1; i <= 10; i++)
{
afile << i << " ";
}
// 关闭文件
afile.close();
// 创建b.txt文件
fstream bfile("b.txt", ios::out);
if (!bfile.is_open())
{
cout << "打开文件失败" << endl;
return 0;
}
// 打开a.txt文件
fstream file("a.txt", ios::in);
if (!file.is_open())
{
cout << "打开文件失败" << endl;
return 0;
}
char buff;
while (file.get(buff))
{
// 写入到b.txt文件
bfile.put(buff);
// 输出到控制台
cout << buff;
}
//关闭文件
bfile.close();
file.close();
// 删除a.txt文件
remove("a.txt");
return 0;
}