我正在尝试将内容复制document1.txt
到document2.txt
使用这个简单的程序:
int main() {
ifstream in("document1.txt");
ofstream out("document2.txt");
string str;
while(getline(in,str))
out<<str;
}
但是,当我运行程序时,我发现它document2.txt
仍然是空的。
有什么问题?
我正在尝试将内容复制document1.txt
到document2.txt
使用这个简单的程序:
int main() {
ifstream in("document1.txt");
ofstream out("document2.txt");
string str;
while(getline(in,str))
out<<str;
}
但是,当我运行程序时,我发现它document2.txt
仍然是空的。
有什么问题?
“我已经手动创建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;
}
请注意,在这种情况下,您实际上不需要刷新任何缓冲区,也不需要显式关闭流。当这些对象被破坏时,所有这些都会自动发生,即当执行超出范围时。
ifstream document1("document1.txt");
ofstream document2("document2.txt");
string str;
getline(document1, str);
document2<< str<< endl;
document1.close();
document2.close();
试试这个代码。这个对我有用。
测试.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;
}
文档1.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
PS如果您将 test.cpp 的第 9 行从更改为document2.txt,则在 Mac 和 Linux PS 下测试的所有代码
将变为out<<str<<endl;
out<<str;
aaaaaaaabbb bbbc c c cd
因为该getline(in,str)
函数会从中提取字符in
并将它们存储到str
'\n' 或找到文件结尾。
这意味着str
不包含'\n'。您需要自己添加'\n'。
正如 LihO 所说,C++ 下的PS,您不需要关闭in
and out
,因为in
andout
将在第 10 行关闭}
此外,执行第 9 行时您不需要刷新,因为endl
具有刷新功能。