鱼C论坛

 找回密码
 立即注册
查看: 2476|回复: 1

[技术交流] C++(5th):file_copy

[复制链接]
发表于 2021-2-2 19:19:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一叶枫残 于 2021-2-8 18:02 编辑

文件copy代码以及部分详解

  1. #include <iostream>
  2. #include <fstream>

  3. using namespace std;

  4. int main()
  5. {
  6.         char s[25];
  7.         cout << "请输入需要复制的文件名包含后缀:" << endl;
  8.         cin.getline( s , 25);
  9.        
  10.         ifstream in( s );
  11.                
  12.         if( !in )
  13.         {
  14.                 cerr << "打开文件失败" << endl;
  15.                 return 0;
  16.         }
  17.        
  18.         char x[25];
  19.         cout << "请输入复制后的文件名包含后缀:" << endl;
  20.         cin.getline( x , 25);
  21.        
  22.         ofstream out(x);
  23.        
  24.         if( !out )
  25.         {
  26.                 cerr << "打开文件失败" << endl;
  27.                 in.close();
  28.                 return 0;
  29.         }
  30.        
  31.         char c;
  32.         while (in.read(&c , 1))
  33.         {
  34.                 out.write(&c , 1);
  35.         }
  36.        
  37.        
  38.         in.close();
  39.         out.close();
  40.        
  41.        
  42.         return 0;
  43. }
复制代码


第一部分:建立文件指针
在c++里面,需要对文件进行操作需要加上头文件#include <fstream>,同时using namespace std也是绝对的不能遗漏,否则编译会报错;
我们建立文件指针可以有两种操作,第一种
  1. ifstream in;
  2. in.open( "123.txt" );
复制代码

第二种是第一种方式的简单结合
  1. ifstream in( "123.txt" )
复制代码

这里的in就是被定义的指针,同时,把ifstream换成ofstream也可以定义指针,前者的指针只用于读取,后者的指针用于写入;需要注意的是,括号内的文件名是字符串类型,所以可以通过创建字符串来从输入缓冲区来输入需要打开的文件的文件名;

第二部分:文件打开失败
  1. if( !in )
  2. {
  3.         cerr << "打开文件失败" << endl;
  4.         return 0;
  5. }
复制代码

打开的文件指针如果失败后,返回的文件指针的值为0,此时可以用if语句来结束程序(在c++可以用return 0来直接结束程序)这里需要注意cout 和 cerr:前者是写到标准输出的ostream对象,后者是输出到标准错误的ostream对象,常用于输出错误信息;
在上面写的copy程序里要注意,我们定义了两个文件指针,在第一个指针打开成功时,第二个文件打开失败时,要把第一个文件的文件指针关闭(必须,必须,必须关闭,否则可能造成数据的丢失或者泄露),使用的是in.close();

第三部分:复制操作
  1. char c;
  2. while (in.read(&c , 1))
  3. {
  4.         out.write(&c , 1);
  5. }
复制代码

这里的read和write顾名思义,就是读取与写入的操作,有两个参数,分别为字符地址和单次读取的数量,需要注意的是,定义单个字符,字符名不表示字符的地址,所以需要进行取址操作,而且,复制操作不能写成下面这段代码
  1. while (in >> c)
  2. {
  3.         out << c;
  4. }
复制代码

因为这样写,你会发现你的复制文件换行都不见了,全部数据都堆到一行上了

最后,一定一定一定要写上
  1. in.close();
  2. out.close();
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-2-2 20:16:58 | 显示全部楼层
加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-2 04:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表