一叶枫残 发表于 2021-2-2 19:19:28

C++(5th):file_copy

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

文件copy代码以及部分详解
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
        char s;
        cout << "请输入需要复制的文件名包含后缀:" << endl;
        cin.getline( s , 25);
       
        ifstream in( s );
               
        if( !in )
        {
                cerr << "打开文件失败" << endl;
                return 0;
        }
       
        char x;
        cout << "请输入复制后的文件名包含后缀:" << endl;
        cin.getline( x , 25);
       
        ofstream out(x);
       
        if( !out )
        {
                cerr << "打开文件失败" << endl;
                in.close();
                return 0;
        }
       
        char c;
        while (in.read(&c , 1))
        {
                out.write(&c , 1);
        }
       
       
        in.close();
        out.close();
       
       
        return 0;
}

第一部分:建立文件指针
在c++里面,需要对文件进行操作需要加上头文件#include <fstream>,同时using namespace std也是绝对的不能遗漏,否则编译会报错;
我们建立文件指针可以有两种操作,第一种
ifstream in;
in.open( "123.txt" );
第二种是第一种方式的简单结合
ifstream in( "123.txt" )
这里的in就是被定义的指针,同时,把ifstream换成ofstream也可以定义指针,前者的指针只用于读取,后者的指针用于写入;需要注意的是,括号内的文件名是字符串类型,所以可以通过创建字符串来从输入缓冲区来输入需要打开的文件的文件名;

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

第三部分:复制操作
char c;
while (in.read(&c , 1))
{
        out.write(&c , 1);
}
这里的read和write顾名思义,就是读取与写入的操作,有两个参数,分别为字符地址和单次读取的数量,需要注意的是,定义单个字符,字符名不表示字符的地址,所以需要进行取址操作,而且,复制操作不能写成下面这段代码
while (in >> c)
{
        out << c;
}
因为这样写,你会发现你的复制文件换行都不见了,全部数据都堆到一行上了

最后,一定一定一定要写上
in.close();
out.close();

糖逗 发表于 2021-2-2 20:16:58

加油
页: [1]
查看完整版本: C++(5th):file_copy