1

C ++を使用<fstream>すると、テキストファイルをコピーするのは非常に簡単です。

#include <fstream>

int main() {
    std::ifstream file("file.txt");
    std::ofstream new_file("new_file.txt");

    std::string contents;
    // Store file contents in string:
    std::getline(file, contents);
    new_file << contents; // Write contents to file

    return 0;
}

ただし、実行可能ファイルに対して同じことを行うと、出力実行可能ファイルは実際には機能しません。たぶんstd::stringはエンコーディングをサポートしていませんか?

私は次のようなことができることを望んでいましたが、ファイルオブジェクトはポインタであり、それを逆参照することはできません(次のコードを実行すると、実際には何かのメモリアドレスを含むnew_file.exeが作成されます):

std::ifstream file("file.exe");
std::ofstream new_file("new_file.exe");

new_file << file;

LANファイル共有アプリケーションでは欠かせないと思いますので、その方法を知りたいです。ソケット付きのファイルを送信するためのより高いレベルのAPIがあると確信していますが、そのようなAPIが実際にどのように機能するかを知りたいです。

ファイルをビットごとに抽出、保存、および書き込むことができるので、入力ファイルと出力ファイルの間に不一致はありませんか?あなたの助けに感謝します、それは大いに感謝されます。

4

2 に答える 2

7

イルジャーンがコメントした理由はわかりませんが、答えにするために(彼が答えを投稿した場合は、これを削除します)。基本的に、フォーマットされていない読み取りと書き込みを使用する必要があります。getlineデータをフォーマットします。

int main()
{
    std::ifstream in("file.exe", std::ios::binary);
    std::ofstream out("new_file.exe", std::ios::binary);

    out << in.rdbuf();
}

技術的には、上記のように使用する場合を除いてoperator<<、フォーマットされたデータ用です。

于 2012-09-12T00:24:49.267 に答える
2

非常に基本的な用語で:

using namespace std;

int main() {
    ifstream file("file.txt", ios::in | ios::binary );
    ofstream new_file("new_file.txt", ios::out | ios::binary);

    char c;
    while( file.get(c) ) new_file.put(c);

    return 0;
}

ただし、charバッファーを作成し、ifstream::read/ofstream::writeを使用して一度にチャンクの読み取りと書き込みを行う方がよいでしょう。

于 2012-09-12T00:27:07.140 に答える