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))
outifstreamdocument1(“document1.txt”);
流文档2(“document2.txt”);
字符串str;
getline(文件1,str);
document2ifstream-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