我正在尝试使用这个简单的程序将document1.txt
的内容复制到document2.txt
:
int main() {
ifstream in("document1.txt");
ofstream out("document2.txt");
string str;
while(getline(in,str))
out<<str;
}
但是,当我运行程序时,我发现document2.txt
仍然是空的。
可能出现什么问题?
答案 0 :(得分:1)
ifstream in("document1.txt");
ofstream out("document2.txt");
string str;
while(getline(in,str))
{
out<<str;
}
in.close(); // <---
out.close(); // <---
答案 1 :(得分:1)
&#34;我手动创建了document1.txt
和document2.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 ,您不需要关闭in
和out
,因为in
和out
将会关闭第10行}
此外,执行第9行时不需要刷新,因为endl
具有刷新功能。