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

C++ 将一个文件的内容复制到另一个文件会使另一个文件为空,c++,visual-studio,visual-c++,file-io,ofstream,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; } intmain(){ ifstream-in(“document1.txt”); 流式输出(“docu

我正试图使用以下简单程序将
document1.txt
的内容复制到
document2.txt

int main() {
    ifstream in("document1.txt");
    ofstream out("document2.txt");
    string str;
    while(getline(in,str))
        out<<str;
}
intmain(){
ifstream-in(“document1.txt”);
流式输出(“document2.txt”);
字符串str;
while(getline(in,str))
out
ifstreamdocument1(“document1.txt”);
流文档2(“document2.txt”);
字符串str;
getline(文件1,str);
document2
ifstream-in(“document1.txt”);
流式输出(“document2.txt”);
字符串str;
while(getline(in,str))
{
out“我已经手动创建了
document1.txt
document2.txt

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

您可以将它们放置到适当的目录或指定完整路径,例如,将它们直接放置到
C:
和在代码中执行:

ifstream in("C:\\document1.txt");
ofstream out("C:\\document2.txt");
如果在打开时出现错误,您会注意到以下情况:

if (!out.is_open())
{
    std::cout << "ERROR: Can not open document2.txt" << std::endl;
    return -1;
}
如果(!out.is_open())
{
标准::couttest.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;
}
在命令行下,您可以执行以下操作

$g++ test.cpp -o test.out
$test.out
然后您将获得document2.txt

aaaaaaaa
bbb bbb
c c c c
d


P.S.所有在Mac和Linux下测试的代码

P.S.如果您将test.cpp的第9行从
更改为“超出”,您是否检查了文件是否实际打开了?您没有明确关闭流,因此它们在超出范围之前不会被刷新/关闭。这是您的整个程序,还是之后会发生其他事情?@Ali Alamiri。谢谢您的回复。我在t他开始了。这可能是问题所在吗?请发布一些你如何“创建”的代码,打开并关闭了它们。@benjymous。是的,这就是整个程序。我按照您的建议指定了完整路径,并且我创建的文档位于同一项目的文件夹中,但仍然有相同的问题。有什么想法吗?Thanks@Simplicity:您是否添加了检查
out.is_open()是否打开的行
?它是否输出了错误?@简单性:也不要显式创建输出文件。让您的程序创建它。是的,我已在while循环之前添加了检查,并删除了手动创建的
document2.txt
,并且没有任何错误。但是,问题仍然存在……当任何流对象超出范围时,它们将被销毁并关闭流。无需显式调用
close
aaaaaaaa
bbb bbb
c c c c
d
$g++ test.cpp -o test.out
$test.out
aaaaaaaa
bbb bbb
c c c c
d
 aaaaaaaabbb bbbc c c cd