在C#中将字节写入文件

在C#中将字节写入文件,第1张

概述我有一个来自Oracle数据库的BLOB.在.NET中,它是OracleLob类型,其中包括Read和ReadByte方法. int OracleLob.Read(byte[] buffer, int offset, int count)int OracleLob.ReadByte() 因此,Read方法读取一个字节序列,ReadByte一次读取一个字节.这是我的代码: OracleLob ol 我有一个来自Oracle数据库的BLOB.在.NET中,它是OracleLob类型,其中包括Read和ReadByte方法.

int OracleLob.Read(byte[] buffer,int offset,int count)int OracleLob.ReadByte()

因此,Read方法读取一个字节序列,ReadByte一次读取一个字节.这是我的代码:

OracleLob ol = (OracleLob) cmd.Parameters[1].Value; //her er filen!!BinaryWriter binWriter = new BinaryWriter(file.Open(@"D:\wordfile.DOCX",fileMode.Create));int currentByte = ol.ReadByte();while (currentByte != -1){   binWriter.Write(currentByte);   currentByte = ol.ReadByte();}binWriter.Close();

但是当我在Word中打开wordfile.DOCX时,它表示该文件已损坏且无法打开.我究竟做错了什么?

解决方法 代码有什么问题,它在将字节数据写入BinaryWriter时使用了int值.它使用的是写入int而不是写入字节的重载,因此源中的每个字节都将写为4个字节.如果你检查文件大小,你会发现它的大小应该是它应该的四倍.

将值转换为byte,以便使用Write方法的正确重载:

binWriter.Write((byte)currentByte);

为了更有效地执行此 *** 作,您可以使用缓冲区一次读取字节块而不是单个字节:

using (fileStream stream = file.Open(@"D:\wordfile.DOCX",fileMode.Create)) {  byte[] buffer = new byte[4096];  int len = ol.Read(buffer,buffer.Length);  while (len > 0) {    stream.Write(buffer,len);    len = ol.Read(buffer,buffer.Length);  }}
总结

以上是内存溢出为你收集整理的在C#中将字节写入文件全部内容,希望文章能够帮你解决在C#中将字节写入文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1216547.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存