vector内容二进制写文件的问题!

ywapple 2009-03-19 02:50:53
#include <fstream>
#include <vector>
#include <iterator>
#include<windows.h>
using namespace std;

struct StockList
{
char MarketCode[4];
char StockCode[8];
char Stockname[16];
};

ostream& operator<<( ostream& os, const StockList& sl)
{
return os << (LPBYTE)(sl.MarketCode) << (LPBYTE)(sl.StockCode) << (LPBYTE)(sl.Stockname);
}

int _tmain(int argc, _TCHAR* argv[])
{
StockList sl;
vector<StockList> v;
sprintf_s(sl.MarketCode, 4, "%s", "SH");
sprintf_s(sl.StockCode, 8, "%s", "600000");
sprintf_s(sl.Stockname, 16, "%s", "浦发银行");
v.push_back(sl);
sprintf_s(sl.MarketCode, 4, "%s", "SH");
sprintf_s(sl.StockCode, 8, "%s", "600001");
sprintf_s(sl.Stockname, 16, "%s", "邯郸钢铁");
v.push_back(sl);
sprintf_s(sl.MarketCode, 4, "%s", "SH");
sprintf_s(sl.StockCode, 8, "%s", "600003");
sprintf_s(sl.Stockname, 16, "%s", "ST东北高");
v.push_back(sl);

ofstream ofile("D:\\v.txt", ios_base::binary|ios_base::trunc);
copy(v.begin(),v.end(),ostream_iterator<StockList>(ofile));

return 0;
}

问题是:写入文件的时候不能以二进制写文件? 大家帮忙看下 thank you!
环境 vs2005 控制台程序!
...全文
245 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyond071 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ywapple 的回复:]
引用 11 楼 fengxuxing 的回复:
ostream& operator < <( ostream& os, const StockList& sl)
{
return os.write(sl.MarketCode,4).write(sl.StockCode,8).write(sl.Stockname,16);
}
这样试试,


试了 也行 谢了!

麻烦请问下如何读取呢?
[/Quote]


istream& operator >> (istream &is, StockList& sl)
{
is.read(sl.MarketCode, 4);
is.read(sl.StockCode, 8);
is.read(sl.Stockname, 16);
return is;
}



vector <StockList> vec;
ifstream ifile("D:\\v.txt", ios_base::binary);

istream_iterator<StockList> in_iter(ifile);
istream_iterator<StockList> eof;
while(in_iter != eof)
{
vec.push_back(*in_iter);
++in_iter;
}
Qlaiaqu 2009-03-19
  • 打赏
  • 举报
回复
用read就行了,方式和write一样的
ywapple 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 fengxuxing 的回复:]
ostream& operator < <( ostream& os, const StockList& sl)
{
return os.write(sl.MarketCode,4).write(sl.StockCode,8).write(sl.Stockname,16);
}
这样试试,
[/Quote]

试了 也行 谢了!

麻烦请问下如何读取呢?
Qlaiaqu 2009-03-19
  • 打赏
  • 举报
回复
ostream& operator <<( ostream& os, const StockList& sl)
{
return os.write(sl.MarketCode,4).write(sl.StockCode,8).write(sl.Stockname,16);
}
这样试试,
ywapple 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 beyond071 的回复:]
C/C++ code
ostream& operator <<( ostream& os, const StockList& sl)
{
os.write(sl.MarketCode, 4);
os.write(sl.StockCode, 8);
os.write(sl.Stockname, 16);
return os;
}



打开方式虽然是二进制流,但是写入的方式也得是二进制流
[/Quote]

呵呵我这样也实现了非明文写入文件
return os << (LPVOID)(sl.MarketCode) << (LPVOID)(sl.StockCode) << (LPVOID)(sl.Stockname);

呵呵但是还是你这样好 谢了
再问下 我咋个读取这个文件到vector呢? 还是以这个文件为例?
麻烦再说下
beyond071 2009-03-19
  • 打赏
  • 举报
回复

ostream& operator <<( ostream& os, const StockList& sl)
{
os.write(sl.MarketCode, 4);
os.write(sl.StockCode, 8);
os.write(sl.Stockname, 16);
return os;
}

打开方式虽然是二进制流,但是写入的方式也得是二进制流
xghuzd 2009-03-19
  • 打赏
  • 举报
回复
帮顶
ywapple 2009-03-19
  • 打赏
  • 举报
回复
莫有人了么???
help^^^^^^^^^^^^^^^^^^
ysysbaobei 2009-03-19
  • 打赏
  • 举报
回复
顶下
ywapple 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Loaden 的回复:]
vector的内容保存在连续内存中,直接访问其数据地址&v[0],结合v.size() * sizeof(?)用memcpy即可。
[/Quote]


这样不好把! 虽然vector是连续的
如果用list呢?
呵呵 大家帮帮忙 帮我想下……
先谢过了……
ywapple 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hairetz 的回复:]
报错了吗?描述一下
[/Quote]

文件里面的内容是:
SH600000浦发银行SH600001邯郸钢铁SH600003ST东北高

我需要的是二进制的不是这种明文的!
ofstream ofile("D:\\v.txt", ios_base::binary|ios_base::trunc);
我已经加了ios_base::binary
大家知道为什么吗?
或者怎么以二进制方式写入文件?
「已注销」 2009-03-19
  • 打赏
  • 举报
回复
vector的内容保存在连续内存中,直接访问其数据地址&v[0],结合v.size() * sizeof(?)用memcpy即可。
  • 打赏
  • 举报
回复
报错了吗?描述一下
sagegz 2009-03-19
  • 打赏
  • 举报
回复
股票么

65,211

社区成员

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

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