小甲鱼-C++快速入门笔记 4 之从另一个小程序接着说

写在前面:作为一只小白,感谢小甲鱼老师提供这么好的入门课程。因此在这里做个笔记,如有侵权请联系删除

www.fishc.com

https://blog.csdn.net/qq_30708445/article/details/88596720

 

文件I/O

编程任务:编写一个文件复制程序,功能实现将一个文件复制到另一个文件

例如:fileCopy sourceFile destFile

c语言实现

#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char* argv[])
{
	FILE *in, *out;
	int ch;
	
	if (argc !=3)
	{
		fprintf(stderr, "输入形式:copyFile 源文件名 目标文件名 \n");
		exit(EXIT_FAILURE);
	}
	
	if ((in = fopen(argv[1], "rb")) == NULL)
	{
		fprintf(stderr, "打不开文件: %s \n", argv[2]);
		fclose(in);
		exit(EXIT_FAILURE);
	}
	
	while ((ch = getc(in) != EOF)
	{
		if (putc(ch, out) == EOF)
		{
			break;
		}
	}
	
    if (ferror(in))
		{
			 fprintf("读取文件 %s 失败! \n", argv[1]);  
		 }
	 if (ferror(out))
		{
			 fprintf("写入文件 %s 失败! \n", argv[2]);  
		 }
	printf("成功复制1个文件! \n");
	floce(in);
	fclose(out);
	return 0;
		   
}

重点分析

1、argc和argv[]

在程序中,main函数有两个参数,整型变量argc和字符指针数组argv[],argc的含义是程序的参数数量,包括本身。

argv[]的每个指针指向命令行的一个字符串,所以argv[0]指向字符串"copyFile.exe",argv[1]指向字符串sourceFile, argv[2]

指向字符串destFile.

2、in和out是我们声明的两个文件指针,它们的类型都是FILE*,分别作为两个I/O流对象使用

3、getc()函数一次从输入流(stdin)读取一个字符,putc()函数把这个字符写入到输出流(stdout),当getc()遇到文件结束标志的时候,函数就返回EOF, EOF是一个宏,在stdio.h中定义, 其值为一个负整数,通常是-1. getc()的返回值是int类型,因此在声明时应该是int ch.

C++版本

#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
	ifstream in;   //定义成了in对象
	
	in.open("test.txt");
	if (!in)
	{
		cerr << "打开文件失败" << endl;
		return 0;
	}
	
	char x;
	while (in >> x)
	{
		cout << x;
	}
	cout << endl;
	in.close();
	return 0;
	
 
}

 

重点分析

1、文件读取类ifstream,写入类ofstream

ifstream in;
 
in.open("test.txt");
 
和
 
ofstream out;
 
out.open("test.txt");

或者如下

ifstream in("test.txt");
 
和
 
ofstream out("test.txt");

以上代码在创建一个ifstream和ofstream类的对象时,将文件的名字传递给它们的构造函数

下面给出一个接受两个参数的实例:

ifstream in(char* filename, int open_mode)

几种常见的打开模式(open_mode):

ios::in    打开一个可读取文件

ios::out    打开一个可写入文件

ios::binary     以二进制的形式打开一个文件

ios::app    写入的所有数据讲被追加到文件的末尾  append

ios::trunk     删除文件原来已存在的内容

ios::nocreate   如果要打开的文件并不存在,那么以此参数调用open函数将无法进行

例子

#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
	ofstream out("test.txt", ios::app);
    //ofstream out("test.txt", ios::app | ios::out);   //多种打开模式共存
	if (!out)
	{
		cerr << "打开文件失败" << endl;
		return 0;
	}
	
	for (int i=10; i>0; i--)
	{
		out << i;
	}
	out << endl;
	out.close();
	return 0;
 
}

如果多种打开模式并存呢?

ios::app | ios::out

课后作业

用c++实现fileCopy

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值