C++文件流问题,用ifstream infile(source,ios::binary);打不开文件

qq345912695 2014-08-12 07:06:24
我想把E盘的​名为11的图片复制到G盘,取名12.

可是测试后发现找不到E盘的11.谁帮我看看,顺便看下我后面的语句是不是对的。谢了

#include <iostream>
#include <fstream>
using namespace std;
void main()
{
char i;
char source[256];
char destination[256];
cout<<"输入源文件"<<endl;
cin>>source;
cout<<"输入目标文件"<<endl;
cin>>destination;
ifstream infile(source,ios::binary);
if(! infile)
{
cerr<<"no found "<<endl;
exit(1);
}
ofstream outfile(destination,ios::binary);
while(1)
{

infile.read((char *)&i,sizeof(int));
outfile.write((char *)&i,sizeof(int));
if(outfile.eof)
break;
}

infile.close();
outfile.close();

}


...全文
1008 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq345912695 2014-08-12
  • 打赏
  • 举报
回复
引用 10 楼 lisong694767315 的回复:

while(1)
{ 
	infile.read((char *)&i,sizeof(int));
	outfile.write((char *)&i,sizeof(int));
	if(infile.eof())  // 这里改成infile
		break;
}
还是4个字节
神奕 2014-08-12
  • 打赏
  • 举报
回复

while(1)
{ 
	infile.read((char *)&i,sizeof(int));
	outfile.write((char *)&i,sizeof(int));
	if(infile.eof())  // 这里改成infile
		break;
}
神奕 2014-08-12
  • 打赏
  • 举报
回复
引用 8 楼 qq345912695 的回复:
复制后的图片只有4字节,是哪错了吗
循环读写是应该判定infile是否到达文件尾,而不是outfile:

while(1)
{ 

 infile.read((char *)&i,sizeof(int));
 outfile.write((char *)&i,sizeof(int));
 if(infile.eof)
  break;
}
qq345912695 2014-08-12
  • 打赏
  • 举报
回复
引用 6 楼 qq345912695 的回复:
[quote=引用 5 楼 lisong694767315 的回复:] [quote=引用 4 楼 u010551600 的回复:] 是不是图片文件都是要 二进制 ios::binary 的形式来读呢?我把 ios::binary去掉,复制过的图片打不开!还是别的方面呢?
在windows系统中,文本模式下,文件以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n" 。所以必须使用二进制模式来读写 2.在类Unix/Linux系统中文本模式下,文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。故而在linux下都一样。[/quote] 恩,我改了后缀名。可以运行了。但是最后生成的12图片打不开。[/quote] 复制后的图片只有4字节,是哪错了吗
qq345912695 2014-08-12
  • 打赏
  • 举报
回复
引用 4 楼 u010551600 的回复:
是不是图片文件都是要 二进制 ios::binary 的形式来读呢?我把 ios::binary去掉,复制过的图片打不开!还是别的方面呢?
恩。图片打开有误。
qq345912695 2014-08-12
  • 打赏
  • 举报
回复
引用 5 楼 lisong694767315 的回复:
[quote=引用 4 楼 u010551600 的回复:] 是不是图片文件都是要 二进制 ios::binary 的形式来读呢?我把 ios::binary去掉,复制过的图片打不开!还是别的方面呢?
在windows系统中,文本模式下,文件以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n" 。所以必须使用二进制模式来读写 2.在类Unix/Linux系统中文本模式下,文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。故而在linux下都一样。[/quote] 恩,我改了后缀名。可以运行了。但是最后生成的12图片打不开。
神奕 2014-08-12
  • 打赏
  • 举报
回复
引用 4 楼 u010551600 的回复:
是不是图片文件都是要 二进制 ios::binary 的形式来读呢?我把 ios::binary去掉,复制过的图片打不开!还是别的方面呢?
在windows系统中,文本模式下,文件以"\r\n"代表换行。若以文本模式打开文件,并用fputs等函数写入换行符"\n"时,函数会自动在"\n"前面加上"\r"。即实际写入文件的是"\r\n" 。所以必须使用二进制模式来读写 2.在类Unix/Linux系统中文本模式下,文件以"\n"代表换行。所以Linux系统中在文本模式和二进制模式下并无区别。故而在linux下都一样。
阿桑- 2014-08-12
  • 打赏
  • 举报
回复
是不是图片文件都是要 二进制 ios::binary 的形式来读呢?我把 ios::binary去掉,复制过的图片打不开!还是别的方面呢?
阿桑- 2014-08-12
  • 打赏
  • 举报
回复
我也刚刚试过,确实是后缀名写错了,程序没有问题,
DoDoMouse 2014-08-12
  • 打赏
  • 举报
回复
后缀名错了..............
神奕 2014-08-12
  • 打赏
  • 举报
回复
图片的后缀为什么是.jepg?我只知道.jpg.jpeg,写错了吧。。。。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧