C++ でのファイル内容のコピー

C++C++Beginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、C++ 言語を使ったファイル操作を用いて、1つのファイルの内容を別のファイルにコピーする方法を学びます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL cpp(("C++")) -.-> cpp/IOandFileHandlingGroup(["I/O and File Handling"]) cpp(("C++")) -.-> cpp/SyntaxandStyleGroup(["Syntax and Style"]) cpp(("C++")) -.-> cpp/BasicsGroup(["Basics"]) cpp(("C++")) -.-> cpp/FunctionsGroup(["Functions"]) cpp(("C++")) -.-> cpp/OOPGroup(["OOP"]) cpp/BasicsGroup -.-> cpp/strings("Strings") cpp/FunctionsGroup -.-> cpp/function_parameters("Function Parameters") cpp/OOPGroup -.-> cpp/classes_objects("Classes/Objects") cpp/IOandFileHandlingGroup -.-> cpp/output("Output") cpp/IOandFileHandlingGroup -.-> cpp/files("Files") cpp/SyntaxandStyleGroup -.-> cpp/code_formatting("Code Formatting") subgraph Lab Skills cpp/strings -.-> lab-96158{{"C++ でのファイル内容のコピー"}} cpp/function_parameters -.-> lab-96158{{"C++ でのファイル内容のコピー"}} cpp/classes_objects -.-> lab-96158{{"C++ でのファイル内容のコピー"}} cpp/output -.-> lab-96158{{"C++ でのファイル内容のコピー"}} cpp/files -.-> lab-96158{{"C++ でのファイル内容のコピー"}} cpp/code_formatting -.-> lab-96158{{"C++ でのファイル内容のコピー"}} end

ヘッダーファイルと名前空間のインクルード

最初のステップでは、コードを進めるために必要なヘッダーファイルと名前空間をインクルードします。

#include <iostream>
#include <fstream>

using namespace std;

1つのファイルを別のファイルにコピーする

このステップでは、以下の操作を行います。

  1. ifstreamofstream クラスのオブジェクトを作成します。
  2. それらがそれぞれのファイルに接続されているかどうかを確認します。接続されていれば処理を続け、そうでなければファイル名を2回確認します。ソースファイルの内容を getline() メソッドを使って読み取り、<< 演算子を使って同じ内容を宛先に書き込みます(つまり、ifstream オブジェクトの各行を ofstream オブジェクトにコピーします)。
  3. コピー後に close() メソッドを使ってファイルを閉じます。
void copyFile(string sourceFile, string destinationFile){

    string line;

    // creating ifstream and ofstream objects
    ifstream sourceFileStream(sourceFile);
    ofstream destinationFileStream(destinationFile);

    // Reading from source file and writing to destination file
    if(sourceFileStream.is_open() && destinationFileStream.is_open()){
        while(getline(sourceFileStream, line)){
            destinationFileStream << line << "\n";
        }
        cout<<"Copy Finished"<<endl;
    }
    else{
        printf("Cannot read File");
    }

    //closing file
    sourceFileStream.close();
    destinationFileStream.close();
}

メイン関数

このステップでは、copyFile() 関数を呼び出してファイルコピー操作を行うためのメイン関数を作成します。

int main(){

    string sourceFile = "original.txt";
    string destinationFile = "copy.txt";

    copyFile(sourceFile, destinationFile);

    return 0;
}

コンパイルと実行

このステップでは、コードファイルが ~/project/main.cpp に保存されているため、カレントディレクトリを ~/project に変更して、ターミナルで以下のコマンドを実行できます。

g++ main.cpp -o main
./main

これにより、プログラムがコンパイルされて実行され、以下の出力が生成されます。

Copy Finished

最終コード

#include <iostream>
#include <fstream>

using namespace std;

void copyFile(string sourceFile, string destinationFile){

    string line;

    // ifstreamとofstreamオブジェクトを作成
    ifstream sourceFileStream(sourceFile);
    ofstream destinationFileStream(destinationFile);

    // ソースファイルから読み取り、宛先ファイルに書き込む
    if(sourceFileStream.is_open() && destinationFileStream.is_open()){
        while(getline(sourceFileStream, line)){
            destinationFileStream << line << "\n";
        }
        cout<<"コピー完了"<<endl;
    }
    else{
        printf("ファイルを読み取れません");
    }

    // ファイルを閉じる
    sourceFileStream.close();
    destinationFileStream.close();
}

int main(){

    string sourceFile = "original.txt";
    string destinationFile = "copy.txt";

    copyFile(sourceFile, destinationFile);

    return 0;
}

まとめ

この実験では、C++ 言語のファイル操作メソッドを使って、ユーザーが1つのファイルの内容を別のファイルにコピーできるアプリケーションを作成しました。