博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
无法访问 MemoryStream 的内部缓冲区
阅读量:5924 次
发布时间:2019-06-19

本文共 1267 字,大约阅读时间需要 4 分钟。

无法访问 MemoryStream 的内部缓冲区

在处理剪贴板数据时, ms.GetBuffer() 语句出现异常,代码如下:

//检索当前位于系统剪贴板中的数据            IDataObject ido = Clipboard.GetDataObject();            //获取存储在 IDataObject 实例中的数据所关联的或可以转换为的所有格式的列表            String[] fmtList = ido.GetFormats();            //循环输出所有格式的列表            for (int i = 0; i < fmtList.GetLength(0); i++)            {                String fmt = fmtList[i];                tb_result.Text += fmt + "\r\n";            }            String dibFmt = "DeviceIndependentBitmap";            if (fmtList.Contains(dibFmt) && ido.GetDataPresent(dibFmt))            {                Object obj = ido.GetData(dibFmt);                MemoryStream ms = (MemoryStream)obj;                MemoryStream ms2 = new MemoryStream();                //构造固定文件头                byte[] bmpHeader = new byte[] { 0x42, 0x4D, 0x96, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00 };                //将文件头和文件数据写入内存流                ms2.Write(bmpHeader, 0, bmpHeader.Length);                ms2.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);

解决方法:

通过读取的方式获取:

MemoryStream ms = (MemoryStream)obj;                byte[] buff = new byte[ms.Capacity];                if (ms.CanRead)                {                    ms.Read(buff, 0, ms.Capacity);                }

你可能感兴趣的文章
Javascript异步数据的同步处理方法
查看>>
9. Palindrome Number(回文数)(leetcode)
查看>>
MySQL之自定义函数实例讲解
查看>>
用.htaccess获取文件夹和文件名
查看>>
自我提升mysql
查看>>
步步为营之——建造者模式(Builder)
查看>>
快速排序——Java
查看>>
unity游戏与我
查看>>
187. Repeated DNA Sequences
查看>>
避免头文件重复包含
查看>>
Oracle:Authid Current_User的使用
查看>>
陈天桥:欣赏360保护隐私 用户安全永远第一
查看>>
JMeter使用技巧
查看>>
【Jump Game II 】cpp
查看>>
ubuntu 下 apache+tomcat整合_(mod-jk方法)[转]
查看>>
iis6 zencart1.39 伪静态规则
查看>>
Python学习之路7——深浅拷贝剖析
查看>>
宁波竞赛题
查看>>
Java实现Socket5代理服务器
查看>>
Android-异步图像装载机
查看>>