注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 程序开发 > 32位开发 > C/C++ 内容正文:实例解析C++/CLI的输入与输出

实例解析C++/CLI的输入与输出

发布时间:2006-08-21 10:53:44 来源:天极开发 网友评论 0 条
  其他类型的I/O

  到目前为止,所有的示例都是处理字符I/O,当然,这对大多数程序来说,已是足够了;但在某些程序中,却需要以二进制形式处理不同的数据类型,请看例4中的代码:

  例4:

using namespace System;
using namespace System::IO;

int main()
{
 /*1*/ Stream^ fs = File::Create("io04.dat");
 /*2*/ BinaryWriter^ bw = gcnew BinaryWriter(fs);

 /*3*/ bw->Write(true);
 bw->Write(L'A');
 bw->Write(0xabcd);
 bw->Write(0x12345678LL);
 bw->Write(123.456F);
 bw->Write("Hello");

 bw->Close();
 fs->Close();

 /*4*/ fs = File::Open("io04.dat", FileMode::Open);
 /*5*/ BinaryReader^ br = gcnew BinaryReader(fs);

 /*6*/ Console::WriteLine("bool: " + br->ReadBoolean());
 Console::WriteLine("wchar_t: " + br->ReadChar());
 Console::WriteLine("int: " + br->ReadInt32());
 Console::WriteLine("long long: " + br->ReadInt64());
 Console::WriteLine("float: " + br->ReadSingle());
 Console::WriteLine("String: " + br->ReadString());

 br->Close();
 fs->Close();
}

  一个BinaryWriter对象必须与某种形式的输出流相关联,因此,在标记1中,我们打开了一个磁盘文件,并在标记2中把文件流与BinaryWriter相关联。而标记4与5中的情况也是一样的。

  标记3及后续的语句,调用了几个Write函数,同样地,在标记6中也有相应的Read函数。程序输出见插3。

  代码段3:例4的输出

bool: True
wchar_t: A
int: 43981
long long: 305419896
float: 123.456
String: Hello

  随机访问I/O

  在随机访问中,可以打开一个文件,并在同一时间,用读写流访问它,或在文件中移动读写位置、保存当前位置以便返回、重新读取一个文件区域、或进行覆写,请看例5:

  例5:

using namespace System;
using namespace System::IO;

int main()
{
 /*1*/ Stream^ fs = gcnew FileStream("Io05.dat", FileMode::Create, FileAccess::ReadWrite);
 BinaryWriter^ bw = gcnew BinaryWriter(fs);
 BinaryReader^ br = gcnew BinaryReader(fs);

 /*2*/ Console::WriteLine("CanRead is {0}, CanWrite is {1}, CanSeek is {2}",
 fs->CanRead, fs->CanWrite, fs->CanSeek);

 /*3*/ Console::WriteLine("Position at start is {0}", fs->Position);
 bw->Write(true);

 /*4*/ long long pos1 = fs->Position;
 bw->Write(1234);
 bw->Write(123.456);

 Console::WriteLine("Position at end is {0}", fs->Position);

 /*5*/ fs->Position = pos1;
 bw->Write(5678); //把1234覆写为5678

 /*6*/ fs->Position = 0;
 bw->Write(false); //把true覆写为false

 /*7*/ fs->Seek(0, SeekOrigin::Begin);
 Console::WriteLine("bool: " + br->ReadBoolean());

 /*8*/ fs->Seek(-1, SeekOrigin::Current);
 Console::WriteLine("bool: " + br->ReadBoolean());
 Console::WriteLine("int: " + br->ReadInt32());

 /*9*/ fs->Seek(-8, SeekOrigin::End);
 Console::WriteLine("double: " + br->ReadDouble());

 bw->Close();
 br->Close();
 fs->Close();
}

  在标记3中,显示了当前文件位置,并在标记4中,通过FileStream::Position属性把它保存在一个变量中。如果设置了相同的属性值,就可以恢复当前位置,如标记5与6所示。在此可以保存任意数量的位置值。

  还可以通过调用FileStream::Seek来确定文件的当前位置,如标记7、8、9中所示;此函数的第一个参数是一个与第二个参数指定位置相关的字节计数。

  举例来说,在标记7中,我们指定了从文件起始处的0字节偏移;在标记8中,我们指定了当前位置之前的1字节偏移--这也正位于我们读取的布尔变量之前;在标记9中,指定了文件结尾前的8字节位置,并读取此处的double变量。一般而言,最好设置Position为一个先前从属性中获取的值;另外,定位至文件的起始与结尾都是安全的,然而,定位至一个任意的字节位置也许会让我们正巧位于一个多字节值当中,那么之后进行的读取将是毫无意义的,程序的输出请见插4。

  插4:例5的输出

CanRead is True, CanWrite is True, CanSeek is True
Position at start is 0
Position at end is 13
boolean: False
boolean: False
int: 5678
double: 123.456

 2/3   |‹ ‹‹ 1 2 3 ›› ›|
相关文章
    无相关信息
【评论】【收藏本文】【打印】【关闭】
上一篇文章:用Viusal C++实现字符串分割函数
下一篇文章:More Effective C++:类型转换
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
推荐阅讯
  • Visual C++ 入门精解-WINDOWS应用程序设计
  • C/C++语言void及void指针深层探索
  • 给MSN Messager装个钩子
  • C++:最强大的.NET语言之可访问性
  • c++友元的入门教程
  • VC编程中如何操作数据库中的图像字段
  • Winsocket编程之TCP/IP体系结构
  • Windows Socket1.1 程序设计
  • 新手入门:C/C++中的结构体
  • C++箴言:拷贝一个对象的所有组成部分
阅读排行
  • 1.Borland 发布C++ Builder 2006 RAD 环境
  • 2.C/C++程序员应聘常见面试题深入剖析
  • 3.Visual C++常用数据类型转换详解
  • 4.C++中的 static 关键字
  • 5.利用VC++实现局域网实时视频传输
  • 6.浅谈C/C++内存泄漏及其检测工具
  • 7.英国投票否决C++/CLI 微软强攻ISO标准受挫
  • 8.VC++下用MSComm控件实现串口通讯
  • 9.伪随机数生成及在VC++中的实现
  • 10.VC++编程实现对波形数据的频谱分析
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载