中易网

C++简单文件操作

答案:4  悬赏:40  
解决时间 2021-04-09 05:02
在d:\3.jpg是83,089 字节,我想把文件的18573字节起到最后读取出来保存到另一个文件D:\4.jpg,用下面的代码,运行后生成的文件竟然是33019 字节
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

void main()
{
ifstream ifs;
ifs.open("D:\\3.jpg",ios::binary|ios::in);
ifs.seekg(18573,ios::beg);
string str;
while(!ifs.eof())
{
ifs>>str;
ofstream ofs;
ofs.open("D:\\4.jpg",ios::binary|ios::app);
ofs<<str;
}
cout<<"已经完成!\n";
}
这个怎么不行呢,不是代码编译不了,是分割出来的文件太小不一样
最佳答案
二进制方式读写应该用read和write而不是<<和>>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

void main()
{
char ch;
ifstream ifs;
ifs.open("D:\\3.jpg",ios::binary|ios::in);
ofstream ofs;
ofs.open("D:\\4.jpg",ios::binary|ios::app);
ifs.seekg(sizeof(char)*18573,ios::beg);
while(!ifs.eof())
{
ifs.read((char *)&ch,sizeof(char));
ofs.write((char *)&ch,sizeof(char));
}
ofs.close();
ifs.close();
cout<<"已经完成!\n";
}
全部回答
只有open没有close不行吧? 并且你这开open都在循环里头 肯定不行吧

注意这里里文件路径中的\要用\\

fin.open("c:\\story.txt");
 fout.open("c:\\numstory.txt");

我验证过了,其实你的程序在Visual Studio 2005下是正确的,但在VC6下不正确。 二进制方式读写也可以用<<和>>,但你的程序有堆栈溢出的风险,还有二进制操作请用低级字符类型char。 修改后代码如下: void main() { ifstream ifs; ofstream ofs; char str; ifs.open("D:\\3.jpg",ios::binary|ios::in); ofs.open("D:\\4.jpg",ios::binary|ios::app); ifs.seekg(18573,ios::beg); while(!ifs.eof()) { ifs>>str; ofs<<str; } cout<<"已经完成!\n"; }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
桂花的香味有毒吗
集美桥下用什么诱饵好钓鱼
全国监理工工程师总监的工资多少啊
Office剪辑管理器在C盘的什么地方?
襄阳市工商局襄城分局王府经济检查中队在什么
什么是人生如絮?
Asp和mssql怎么搭建本地环境
马陵山大酒店在什么地方啊,我要过去处理事情
计算:3除以 (根号3) 乘以根号三分之一
将括号内的翻译成英语(与其求人,不如求己。
物流公司在外地分公司经营范围货运代理是否要
桑塔纳ABS泵起火什么原因
高考的前一天路遇棺材
塑胶杯什么材质的好?
瓦山村地址在什么地方,想过去办事
推荐资讯
华为p8黑名单来电无振动,无玲声
怎样买卖上证50etf基金和期权的区别
我摸了动物,身上会长虱子吗
超级课程表咋用啊!!!为啥我看不到课程表却
贵州三狮汽车销售服务有限公司这个地址在什么
河南拓客网络科技有限公司
武林群侠传玩什么职业好?怎么加点.求高手指导
养鱼的水中碱性太大怎么办最好不要全换水
联想z370装win10一直请稍等转圈圈
公司现在用的AD域管理,人比较多,人员管理不
当x是怎样的实数时根号下2x 3 x 1分之一在实
在外地,去到哥哥租的房子,刚知道他和女朋友
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?