c++写入文件不能换行
本帖最后由 S.W.T 于 2016-7-4 19:09 编辑//File Copy.cpp
//功能:复制文件
//软件:C-Free 5.0
//小甲鱼快速入门C++第四课
#include<iostream>
#include<fstream>
using namespace std;
int main(int argc,char* argv[])
{
//检查调用格式是否正确
if(argc!=3)
{
cerr<<"调用格式:fileCopy.exe sourceFile destFile"<<endl;
return 0;
}
//检查文件是否正确打开
fstream in(argv,ios::in | ios::binary);//以二进制读取文件
if(!in)
{
cerr<<"打开文件失败!"<<endl;
return 0;
}
//检查文件是否正确打开
fstream out(argv,ios::out | ios::binary);//以二进制写入文件
if(!out)
{
cerr<<"打开文件失败!"<<endl;
in.close();
return 0;
}
//应该是错在这里吧
char ch;
while(in.peek()!=EOF)
{
in>>ch;
out<<ch;
}
//关闭文件
in.close();
out.close();
return 0;
}
复制的文本不会少,但会丢失换行符、制表符是怎么回事
例如
源文件:
I love Fishc.com!
I love Fishc.com! I love Fishc.com!
目标文件:
IloveFishc.com!IloveFishc.com!IloveFishc.com!!.com!!
没有空格,没有回车,最后还多出了一些东西。 哈和我遇到的那个问题一样 冥顽 发表于 2016-7-3 22:30
哈和我遇到的那个问题一样
那你解决了吗 S.W.T 发表于 2016-7-4 19:10
那你解决了吗
解决了,但不知道原理。。。
S.W.T 发表于 2016-7-4 19:10
那你解决了吗
http://bbs.fishc.com/forum.php?mod=viewthread&tid=73320&page=1#pid2599902 本帖最后由 S.W.T 于 2016-7-5 08:10 编辑
这是我修改后可以用的代码,但还是不知道为什么
//File Copy.cpp
//功能:复制文件
//软件:C-Free 5.0
//小甲鱼快速入门C++第四课
#include<iostream>
#include<fstream>
using namespace std;
int main(int argc,char* argv[])
{
//检查调用格式是否正确
if(argc!=3)
{
cerr<<"调用格式:fileCopy.exe sourceFile destFile"<<endl;
return 0;
}
//检查文件是否正确打开
fstream in(argv,ios::in | ios::binary);//以二进制读取文件
if(!in)
{
cerr<<"打开文件失败!"<<endl;
return 0;
}
//检查文件是否正确打开
fstream out(argv,ios::out | ios::binary);//以二进制写入文件
if(!out)
{
cerr<<"打开文件失败!"<<endl;
in.close();
return 0;
}
//****************核心内容****************
in.seekg(0,ios::end); //原来是 in.seekg(ios::end);
int filesize = in.tellg();
in.seekg(0,ios::beg); //原来是 in.seekg(ios::beg);
//上三行是为了 获取文件的大小
char ch;//临时变量
//两个方法,但似乎第二个方法不行
for(int i = 0; i < filesize; i ++)
//while(!in.eof()) 最后会有乱码
{
in.get(ch); //原来是:in>>ch;
out.put(ch); //原来是:out<<ch;
}
//结尾工作
in.close();
out.close();
return 0;
}
冥顽 发表于 2016-7-4 19:23
http://bbs.fishc.com/forum.php?mod=viewthread&tid=73320&page=1#pid2599902
这是我修改后可以用的代码,但还是不知道为什么
//File Copy.cpp
//功能:复制文件
//软件:C-Free 5.0
//小甲鱼快速入门C++第四课
#include<iostream>
#include<fstream>
using namespace std;
int main(int argc,char* argv[])
{
//检查调用格式是否正确
if(argc!=3)
{
cerr<<"调用格式:fileCopy.exe sourceFile destFile"<<endl;
return 0;
}
//检查文件是否正确打开
fstream in(argv,ios::in | ios::binary);//以二进制读取文件
if(!in)
{
cerr<<"打开文件失败!"<<endl;
return 0;
}
//检查文件是否正确打开
fstream out(argv,ios::out | ios::binary);//以二进制写入文件
if(!out)
{
cerr<<"打开文件失败!"<<endl;
in.close();
return 0;
}
//****************核心内容****************
in.seekg(0,ios::end); //原来是 in.seekg(ios::end);
int filesize = in.tellg();
in.seekg(0,ios::beg); //原来是 in.seekg(ios::beg);
//上三行是为了 获取文件的大小
char ch;//临时变量
//两个方法,但似乎第二个方法不行
for(int i = 0; i < filesize; i ++)
//while(!in.eof()) 最后会有乱码
{
in.get(ch); //原来是:in>>ch;
out.put(ch); //原来是:out<<ch;
}
//结尾工作
in.close();
out.close();
return 0;
}
提个建议,windows系统的二进制文件,打开的流会做一些特殊处理,有的特殊符号是用多个字符组合的,比如表示行尾的字符用回车和换行的组合\r\n表示。所以换行符号该特殊处理。没学c++,不知道说的有用没。
页:
[1]