C ++复制另一个文件

时间:2017-10-03 00:12:30

标签: c++ ifstream ofstream

我想知道如何使用c ++ ifstream / ofstream复制文件并将其另存为另一个名称。

这是我得到的。我知道如何获取文件,只是因为我不知道如何复制该文件并将其另存为其他名称。

#include<iostream>
#include<fstream>
#include<string>
    namespace std;
int main()
    {
    ofstream
    ifstream
    cout << "enter your file you want to copy"<< endl;
    cin >> input_file_name;
    in_file.open(input_file_name);
    if (!in_file)
    {
    cout <<" there is no such file"<<endl;
    return 0;
    }
    cout <<" enter the name you want to save this copy file"<<endl;
    cin >> output_file_name;
    out_file.open(output_file_name);
    if (!out.file)
    {
    cout<<"file is not available"<<endl;
    return 0;
    }
    in_file.close();
    out_file.close();
    return 0;
}

4 个答案:

答案 0 :(得分:1)

重载rdbuf

<<是标准的方法。

  ifstream src;
  ofstream dst;

  src.open("from", ios::in | ios::binary);
  dst.open("toto", ios::out | ios::binary);
  dst << src.rdbuf();

答案 1 :(得分:0)

基本上,您希望一次读取一个字符并将所述字符写入输出流。有一个get()重载,它接受一个可以工作的streambuf输出变量。您也可以在cplusplus.com rdbuf文档中使用该示例。

http://www.cplusplus.com/reference/fstream/ofstream/rdbuf/

答案 2 :(得分:0)

下面的代码可以让您了解自己想要做什么。

  

您应该记住几件事,例如:

     
      
  • 是给予读取的文件的路径是否有效?
  •   
  • 或者在推送新数据之前,是否要保存输出文件中的数据(如果该文件存在?)。
  •   

您只需在桌面或任何位置创建文件即可测试此代码,只需更改filePathdestinationPath变量即可运行代码。 (c ++ 11)

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

vector<string> readFromFile(const char *filePath) {
    vector<string> container;
    ifstream obj(filePath); // automatically our file would be open
    if (obj.is_open()) { // we check anyways
        string line = "";
        while(getline(obj, line)) {
            if (!line.empty()) // prevent us to insert empty line into our vector
             container.push_back(line);
        }
        obj.close(); // close after we finish reading to avoid corruption
    }
    return container;
}

bool pipingToDestination(vector<string>data, const char *filePath) {
    std::filebuf fb; fb.open(filePath,std::ios::out); // open the file
    ostream obj(&fb);
    if (!data.empty() && fb.is_open()) { // make sure we have some data && the file file is open to write
        for (string x: data) { // c++11
            obj << x << endl; 
        }
        fb.close();
        return true;
    }
    return false;
}

int main() {
    string filePath = "/Users/lamar/Desktop/testFile.txt";
    vector<string> data = readFromFile(filePath.c_str());

    cout << "File has passed data into container ... \n";

    for(string x: data) {
        cout << x << endl;
    }

    cout << "Creating destination file \n";
    string destinationPath = "/Users/lamar/Desktop/destFile.txt";
    cout << "has piped data into file " << boolalpha << pipingToDestination(data, destinationPath.c_str());

    return 0;
}

这不是执行此操作的唯一方法,但此代码应该为您指明方向

答案 3 :(得分:0)

复制文件并将其保存在另一个文件中:

#include <fstream>
#include <iostream>
#include <string>

int main(int arc, char* argv[]) {
    std::ifstream file1(argv[1]);
    std::ofstream file2(argv[2]);
    std::string line;
    if (file1.good() && file2.good()) {
        while (getline(file1, line)) {
            file2 << line;
            file2 << '\n';
        }
    }
    file1.close();
    file2.close();
}