将一个文件的内容复制到另一个文件会使另一个文件为空

时间:2013-10-25 10:47:21

标签: c++ visual-studio visual-c++ file-io ofstream

我正在尝试使用这个简单的程序将document1.txt的内容复制到document2.txt

int main() {
    ifstream in("document1.txt");
    ofstream out("document2.txt");
    string str;
    while(getline(in,str))
        out<<str;
}

但是,当我运行程序时,我发现document2.txt仍然是空的。

可能出现什么问题?

4 个答案:

答案 0 :(得分:1)

    ifstream in("document1.txt");
    ofstream out("document2.txt");
    string str;
    while(getline(in,str))
    {
        out<<str;
    }
    in.close(); // <---
    out.close(); // <---

有一个关闭它的功能。请检查:ifstreamofstream

答案 1 :(得分:1)

&#34;我手动创建了document1.txtdocument2.txt&#34;

如果您直接从Visual Studio运行程序,请注意默认情况下工作目录设置为$(ProjectDir),即这些文件必须放在项目文件所在的同一目录中({{1} } / .vcproj)是。

您可以将它们放在相应的目录中或指定完整路径,例如将它们直接放到.vcxproj并在代码中执行:

C:

如果您在打开时出现错误输出内容,则会注意到这一点:

ifstream in("C:\\document1.txt");
ofstream out("C:\\document2.txt");

请注意,在这种情况下,您实际上并不需要刷新任何缓冲区,也不会显式关闭流。当这些对象被破坏时,即当执行超出范围时,所有这些都将自动发生。

答案 2 :(得分:0)

ifstream document1("document1.txt");
ofstream document2("document2.txt");
string str;
getline(document1, str);
document2<< str<< endl;
document1.close();
document2.close();

试试这段代码。它对我有用。

答案 3 :(得分:0)

TEST.CPP

#include <iostream>
#include <fstream>
using namespace std;
int main() {
    ifstream in("document1.txt");
    ofstream out("document2.txt");
    string str;
    while(getline(in,str))
        out<<str<<endl;
}

document1.txt

aaaaaaaa
bbb bbb
c c c c
d

在命令行下你可以做到

$g++ test.cpp -o test.out
$test.out

然后你会得到document2.txt

aaaaaaaa
bbb bbb
c c c c
d



P.S。所有在Mac和Linux下测试的代码 如果您将test.cpp的第9行从out<<str<<endl;更改为out<<str;,则 P.S。
document2.txt将成为

 aaaaaaaabbb bbbc c c cd 

因为getline(in,str)函数会从in中提取字符并将其存储到str中,直到找到'\ n'或文件结尾
这意味着str不包含'\ n'。你需要自己添加'\ n' 正如LihO所说,在C ++下 PS ,您不需要关闭inout,因为inout将会关闭第10行}
此外,执行第9行时不需要刷新,因为endl具有刷新功能。