barriers / 阅读 / 详情

DELPHI基础教程:开发Delphi对象式数据管理功能(二)[1]

2023-06-26 11:47:39
共1条回复
小菜G

   TResourceStream对象

  TResourceStream对象是另一类MemoryStream对象 它提供对Windows 应用程序资源的访问 因此称它为资源流 TResourceSream也是从TCustomMemoryStream 继承的 因此在TCustomMemoryStream对象的基础上 定义了与指定资源模块或资源文件建立连接的构造方法 并且还覆盖了Write 以实现向资源文件中写数据

  下面介绍TResourceStream的实现

   私有域

  TResourceStream没有定义新的属性 但它在private部分定义了两个数据域HResInfo和HGlobol和一个私有方法Initialize 它们的定义如下

  TResourceStream = class(TCustomMemoryStream)

  private

  HResInfo: HRSRC;

  HGlobal: THandle;

  procedure Initialize(Instance: THandle; Name ResType: PChar)

  …

  end;

  HRSRC是描述Windows资源信息的结构句柄 HGlobal变量代表资源所在模块的句柄 如果操作的是应用程序资源 HGlohal就代表EXE程序的句柄 如果是动态链接库(DLL) 则HGlobal 代表动态链接库的句柄 TResourceStream对象使用这两上变量访问应用程序或动态链接库中的资源

  Initialize方法是TResourceStream对象内部使用的 它的构造方法Create和CreateFromID都是调用Initialize方法完成对TResourceStream的初始化 它的实现如下

  procedure TResourceStream Initialize(Instance: THandle; Name ResType: PChar)

  procedure Error;

  begin

  raise EResNotFound Create(FmtLoadStr(SResNotFound [Name]))

  end;

  begin

  HResInfo := FindResource(Instance Name ResType)

  if HResInfo = then Error;

  HGlobal := LoadResource(Instance HResInfo)

  if HGlobal = then Error;

  SetPointer(LockResource(HGlobal) SizeOfResource(Instance HResInfo))

  end;

  该方法实现中 首先调用Windows函数FoundResource得到由参数Instance指定的模块中的名为Name和类型为ResType的资源 然后调用LoadResource将资源调用内存 并返回该资源在内存中的句柄 最后 将该资源复制到ResourceStream中 方法的Instance参数代表要调用的资源所在的模块句柄 模块可以是可执行文件 也可以是动态链接库 如果在读取资源时没在模块中发现要找的资源则产生异常事件

   构造方法Create和CreateFromID

  这两个方法在实现上没有大的不同 顾名思义 第一个方法是通过资源名构造TResourceStream; 第二个方法通过资源ID构造TResourceStream 而且在实现过程中 它们都调用了Initialize方法 下面是它们的实现

  constructor TResourceStream Create(Instance: THandle; const ResName: string;

  ResType: PChar)

  begin

  inherited Create;

  Initialize(Instance PChar(ResName) ResType)

  end;

  constructor TResourceStream CreateFromID(Instance: THandle; ResID: Integer;

  ResType: PChar)

  begin

  inherited Create;

  Initialize(Instance PChar(ResID) ResType)

  end;

  这两个方法中都有Instance参数 该参数值的含义在Insitialize中介绍过

   Write方法

  TResourceStream的Write方法只完成一件事 就产生这个异常事件 其实现如下

  function TResourceStream Write(const Buffer; Count: Longint) Longint;

  begin

  raise EStreamError CreateRes(SCantWriteResourceStreamError)

  end;

  从方法实现中可以看到 TSourceStream对象是不允许写数据的 一旦往资源流中写数据将产生异常事件

   析构方法Destroy

  该方法产生给资源解锁 然后释放该资源 最后调用继承的Destroy方法释放ResourceStream 其实现如下

  destructor TResourceStream Destroy;

  begin

  UnlockResource(HGlobal)

  FreeResource(HResInfo)

  inherited Destroy;

  end;

  回顾Initialize方法 我们不难发现

  ● ResourceStream没有额外地给资源重新分配内存 而是直接使用HGlobal句柄所指 的内存域

  ● ResourceStream中的资源在流的生存期 始终是Lock状态 因此要根据Windows 的内存使用规则合理安排ResourceStream的使用

  ● ResourceStream只是用于访问应用程序和动态链接库中的资源的

  在Classes在单元中提供了InternalReadComponentRes函数 该函数使用了TResourceStream对象从Delphi应用程序中读取部件 Delphi是将窗体和部件信息放在模块资源的RCDATA段的

   TBlobStream对象

  从Delphi 数据库开发平台这个意义上说 TBlobStream 对象是个很重要的对象 TBlobStream对象提供了修改TBlobField TBytesField或TVarBytesField中数据的技术 开发者可以象对待文件或流那样在数据库域中读写数据

  传统数据库发展的一个重要趋向是往多媒体数据库发展 目前比较著名和流行的数据库都支持多媒体功能 多媒体数据存储中的一大难点是数据结构不规则 数据量大 各大数据库产品是采用BLOB技术解决多媒体数据存储中的问题 Delphi的TBlobStream对象的意义就在于 一方面可以使Delphi应用程序充分利用多媒体数据库的数据管理能力 另一方面又能利用Object Pascal的强大程序设计能力给多媒体数据库提供全方向的功能扩展余地

  使用TBlobStream对象可以在多媒体数据库的BLOB字段存储任意格式的数据 一般说来 许多多媒体数据库只能支持图像 语音或者OLE服务器支持的数据 利用TBlobStream则不同 只要是程序能够定义的数据格式 它都能在BLOB字段中读写 而不需要其它辅助工具

  TBlobStream用构造方法Create建立数据库域和BLOB流的联接 用Read或Write 方法访问和改变域中的内容 用Seek方法 在域中定位 用Truncate方法删除域中当前位置起所有的数据

   TBlobStream的属性和方法

  TBlobStream对象从TStream直接继承 没有增添新的属性 它覆盖了Read Write 和Seek方法 提供了对BLOB字段的访问操作 它增添了Truncate方法以实现BLOB字段中的删除操作

   Read方法

  声明

function Read(var Buffer; Count: Longint) Longint;

  Read方法从数据库域的当前位置起复制Count个字节的内容到Buffer中 Buffer也必须至少分配Count个字节 Read方法返回实际传输的字节数 因为传输的字节数可能小于Count 所以需要选择符的边界判断

lishixinzhi/Article/program/Delphi/201311/25100

相关推荐

如何强制释放内存的MemoryStream占用

1、这个流程确实构造了许多新的对象(Panel、BitmapImage、Button),所以内存上涨是必然的;2、其次,由于C#托管的原因,有些临时内存在频繁的循环中可能来不及释放,你可以在每次循环结束时调用GC.GetTotalMemory( true )来强制回收当前的垃圾;如果强制GC还不行的话,那说明你的代码就是要飚内存,那就得改你的流程了,没其他的办法了。
2023-06-26 04:51:411

c#中memorystream需要用什么指令集

using System.IO;
2023-06-26 04:51:492

C#.net中MemoryStream数据流如何多次写入一次读出

写入后缓冲区指针是在最后面的所以要移动指针到最前面ms.Position=0;再去读
2023-06-26 04:51:561

怎样将xmlDocument转换为memoryStream

#region 将XmlDocument转化为string/// <summary>/// 将XmlDocument转化为string/// </summary>/// <param name="xmlDoc"></param>/// <returns></returns>public string ConvertXmlToString(XmlDocument xmlDoc){MemoryStream stream = new MemoryStream();XmlTextWriter writer = new XmlTextWriter(stream, null);writer.Formatting = Formatting.Indented;xmlDoc.Save(writer);StreamReader sr = new StreamReader(stream, System.Text.Encoding.UTF8);stream.Position = 0;string xmlString = sr.ReadToEnd();sr.Close();stream.Close();return xmlString;}#endregion
2023-06-26 04:52:021

c# 文本框显示 MemoryStream 流 然后以字符串形式保存到数据库

是要代码吗?还是求思路?这个很简单啊
2023-06-26 04:52:103

c#中stream怎么转memorystream

using System.IO;
2023-06-26 04:52:172

DataTable导出到Excel,用MemoryStream好还是不用MemoryStream好?为什么?

MemoryStream 是一个特例,MemoryStream中没有任何非托管资源,所以它的Dispose不调用也没关系。托管资源.Net会自动回收MemoryStream继承自Stream类。内存流的好处是指针可以晃来晃去,也就是支CanSeek,Position,Seek()。任意读其中一段。按你的要求到处到Excel的话就有点多余了,DATATABLE导出EXCEL文件,普通的做法一般是创建一个XLS的对象,然后直接循环填入即可。 投机取消的呢,直接存为CSV格式,也是可以的。又或者追求速度和方便可以考虑用excellaibery这样的插件来导出。 更简单。http://my.oschina.net/hellokity/blog/10120
2023-06-26 04:52:241

怎么在c# 中把memorystream 转换成word文件 并打开 ,转换时不存在硬盘上

memorystream 需要以word格式保存在硬盘上,保存成文件。然后在调用word.exe打开。对于不想转换时保存在硬盘,也许是可以的,我不确定.NET中有没有一个WORD类。但是你保存在内容让PC上的WORD软件如何打开呢?虽然word本身也应该是读取文件到内存,但是除非它暴露出接收内存数据的接口,否则你的设想应该不能实现。
2023-06-26 04:52:311

如何把stream转成MemoryStream

不可能直接转的,需要从Stream把数据读出来,写入MemoryStream。 MemoryStream ms = new MemoryStream(); byte[] buffer = new byte[1024]; while(true) { int sz = inStream.Read(buffer, 0, 1024); if (sz == 0) break; ms.Write(buffer, 0, sz); } ms.Position = 0; return ms;
2023-06-26 04:52:381

如何将XML序列化到MemoryStream并直接读取出来

using System;using System.Collections.Generic;using System.IO;using System.Runtime.Serialization.Formatters.Binary;using System.Text;using System.Xml;using System.Xml.Serialization;namespace EFPlatform.Common.Helper{public class SerializationHelper{#region SerializeToStreampublic static Stream SerializeToStream(object obj){Stream s = (Stream)(new MemoryStream());SerializeToStream(s, obj);return s;}public static void SerializeToStream(Stream s, object obj){BinaryFormatter bf = new BinaryFormatter();bf.Serialize(s, obj);}#endregion#region SerializeToXmlpublic static string SerializeToXml(object obj){return SerializeToXml(obj, "", "");}public static string SerializeToXml(object obj, string xsi, string xsd){XmlSerializer serializer = new XmlSerializer(obj.GetType());XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();xsn.Add(xsi, xsd);StringBuilder sb = new StringBuilder();using(TextWriter tw = new StringWriter(sb)){serializer.Serialize(tw, obj, xsn);}return sb.ToString();}#endregion#region DeserializeFromStreampublic static object DeserializeFromStream(Stream s, Type type){BinaryFormatter bf = new BinaryFormatter();s.Position = 0;return bf.Deserialize(s);}public static T DeserializeFromStream<T>(Stream s){return (T)DeserializeFromStream(s, typeof(T));}#endregion#region DeserializeFromXmlpublic static object DeserializeFromXml(string xml, Type type){XmlSerializer serializer = new XmlSerializer(type);object obj = null;using(StringReader sr = new StringReader(xml)){obj = serializer.Deserialize((TextReader)sr);}return obj;}public static T DeserializeFromXml<T>(string xml){return (T)DeserializeFromXml(xml, typeof(T));}#endregion}}希望可以帮到你~
2023-06-26 04:52:471

怎样把一个字符串赋给memorystream类型的变量

强制类型转化, 如: char ch="a"; int b=(int)ch; 这样就把字符型变量ch转化为int型并赋给b 把string转化为int型,那个不可能的,除非是一些习题规定以某种方式进行转换,那就要自己写实现的具体代码了,但是那个问题是另外一回事了
2023-06-26 04:53:051

怎样将xmlDocument转换为memoryStream

#region 将XmlDocument转化为string /// <summary> /// 将XmlDocument转化为string /// </summary> /// <param name="xmlDoc"></param> /// <returns></returns> public string ConvertXmlToString(XmlDocument xmlDoc) { MemoryStream stream = new MemoryStream(); XmlTextWriter writer = new XmlTextWriter(stream, null); writer.Formatting = Formatting.Indented; xmlDoc.Save(writer); StreamReader sr = new StreamReader(stream, System.Text.Encoding.UTF8); stream.Position = 0; string xmlString = sr.ReadToEnd(); sr.Close(); stream.Close(); return xmlString; } #endregion
2023-06-26 04:53:121

求教,C#中使用MemoryStream 时出异常OutOfMemoryException-CSDN论坛

using(ms=newMemoryStream())//这里至少要设置文件名啊
2023-06-26 04:53:192

找不到类型或命名空间名称“MemoryStream”(是否缺少 using 指令或程序集引用)

Using System.IO;或者用全名 System.IO.MemoryStream
2023-06-26 04:53:261

如何将一个MemeryStream转换成FileStream?

从MemeryStream中读出byte[]再将byte[]写入到FileStream
2023-06-26 04:53:342

delphi memorystream怎样清空

楼主你好。 把起始/结束标志串存到byte数组,然后CompareMem对比stream,找出起始结束点,再copy到新stream不就行了!
2023-06-26 04:53:411

把object数组转为内存流的问题?

//【客户端】//这是你的object数组Object[] objArray = new Object[10];//内存流(需要引用 System.IO)MemoryStream ms=new MemoryStream();//序列化(需要引用 System.Runtime.Serialization.Formatters.Binary)BinaryFormatter bf = new BinaryFormatter();//将数据保存到内存流bf.Serialize(ms, objArray);//【服务端】MemoryStream msGet;//你通过自己的方法获取到内存流BinaryFormatter bfServer = new BinaryFormatter();//反序列化,得到数据Object[] getObjectArray = (Object[])bf.Deserialize(msGet);
2023-06-26 04:53:471

什么是内存流和文件流?

什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。流不但可以处理文件,还可以处理动态内存、网络数据等多种数据形式。如果你对流的操作非常熟练,在程序中利用流的方便性,写起程序会大大提高效率的。 下面,笔者通过四个实例:EXE文件加密器、电子贺卡、自制OICQ和网络屏幕传输来说明Delphi编程中 "流 "的利用。这些例子中的一些技巧曾经是很多软件的秘密而不公开的,现在大家可以无偿的直接引用其中的代码了。 "万丈高楼平地起 ",在分析实例之前,我们先来了解一下流的基本概念和函数,只有在理解了这些基本的东西后我们才能进行下一步。请务必认真领会这些基本方法。当然,如果你对它们已经很熟悉了,则可以跳过这一步。 一、Delphi中流的基本概念及函数声明 在Delphi中,所有流对象的基类为TStream类,其中定义了所有流的共同属性和方法。 TStream类中定义的属性介绍如下: 1、Size:此属性以字节返回流中数据大小。 2、Position:此属性控制流中存取指针的位置。 Tstream中定义的虚方法有四个: 1、Read:此方法实现将数据从流中读出。函数原形为: Function Read(var Buffer;Count:Longint):Longint;virtual;abstract; 参数Buffer为数据读出时放置的缓冲区,Count为需要读出的数据的字节数,该方法返回值为实际读出的字节数,它可以小于或等于Count中指定的值。 2、Write:此方法实现将数据写入流中。函数原形为: Function Write(var Buffer;Count:Longint):Longint;virtual;abstract; 参数Buffer为将要写入流中的数据的缓冲区,Count为数据的长度字节数,该方法返回值为实际写入流中的字节数。 3、Seek:此方法实现流中读取指针的移动。函数原形为: Function Seek(Offset:Longint;Origint:Word):Longint;virtual;abstract; 参数Offset为偏移字节数,参数Origint指出Offset的实际意义,其可能的取值如下: soFromBeginning:Offset为移动后指针距离数据开始的位置。此时Offset必须大于或者等于零。 soFromCurrent:Offset为移动后指针与当前指针的相对位置。 soFromEnd:Offset为移动后指针距离数据结束的位置。此时Offset必须小于或者等于零。该方法返回值为移动后指针的位置。 4、Setsize:此方法实现改变数据的大小。函数原形为: Function Setsize(NewSize:Longint);virtual; 另外,TStream类中还定义了几个静态方法: 1、ReadBuffer:此方法的作用是从流中当前位置读取数据。函数原形为: Procedure ReadBuffer(var Buffer;Count:Longint); 参数的定义跟上面的Read相同。注意:当读取的数据字节数与需要读取的字节数不相同时,将产生EReadError异常。 2、WriteBuffer:此方法的作用是在当前位置向流写入数据。函数原形为: Procedure WriteBuffer(var Buffer;Count:Longint); 参数的定义跟上面的Write相同。注意:当写入的数据字节数与需要写入的字节数不相同时,将产生EWriteError异常。 3、CopyFrom:此方法的作用是从其它流中拷贝数据流。函数原形为: Function CopyFrom(Source:TStream;Count:Longint):Longint; 参数Source为提供数据的流,Count为拷贝的数据字节数。当Count大于0时,CopyFrom从Source参数的当前位置拷贝Count个字节的数据;当Count等于0时,CopyFrom设置Source参数的Position属性为0,然后拷贝Source的所有数据; TStream还有其它派生类,其中最常用的是TFileStream类。使用TFileStream类来存取文件,首先要建立一个实例。声明如下: constructor Create(const Filename:string;Mode:Word); Filename为文件名(包括路径),参数Mode为打开文件的方式,它包括文件的打开模式和共享模式,其可能的取值和意义如下: 打开模式: fmCreate :用指定的文件名建立文件,如果文件已经存在则打开它。 fmOpenRead :以只读方式打开指定文件 fmOpenWrite :以只写方式打开指定文件 fmOpenReadWrite:以写写方式打开指定文件 共享模式: fmShareCompat :共享模式与FCBs兼容 fmShareExclusive:不允许别的程序以任何方式打开该文件 fmShareDenyWrite:不允许别的程序以写方式打开该文件 fmShareDenyRead :不允许别的程序以读方式打开该文件 fmShareDenyNone :别的程序可以以任何方式打开该文件 TStream还有一个派生类TMemoryStream,实际应用中用的次数也非常频繁。它叫内存流,就是说在内存中建立一个流对象。它的基本方法和函数跟上面是一样的。 好了,有了上面的基础后,我们就可以开始我们的编程之行了。
2023-06-26 04:53:562

jquery怎么传送stream数据流

使用ASP.NET MVC 3 RC2 的时候发现,这样的代码在一些情况下总是无法返回正确的结果(理论上来说前几个版本也存在这种可能):MemoryStream ms = xxxx;//图片类型return File(ms, "image/jpeg");跟踪了一下File的结果,确实已经有数据,但是无法在页面上返回(此时File重写方法返回的是FileSreamResult)。但如果把这个Stream先保存为文件,然后直接返回文件名是可以的: return File(filename, "image/jpeg");此时File重写方法返回的是FileContentResult。经过比较发现,这两个方法其实都可以获取到正确的FileSreamResult或者FileContentResult,只不过MVC无法正确渲染FileSreamResult,于是walkaround一下:MemoryStream ms = xxxx;//图片类型return File(ms.ToArray(), "image/jpeg");这样就把MemoryStream转成byte[]类型,返回类型为FileContentResult,可以正常输出。
2023-06-26 04:54:181

如何将C#/.NET 将json字符串格式数据转换成对象?

下个Newtonsoft.Json插件引用 Newtonsoft.Json.dll1、json字符串string xxx = "{"count":"1","Product_Code":"14003949","Product_Name":"聚丙烯树脂","Product_Batch":"20140228D8103","Certification_Code":"SCSH20140226-001-01","Plate_Code":"L5E-89","Grade":"合格品","WarehouseIn_Num":"19120.0000000","WarehouseIn_Weight":"478.000","WarehouseIn_Confirm_Date":"2014-03-01"}";则直接转换为对象:M_WarehouseInResult whh = JsonConvert.DeserializeObject<M_WarehouseInResult>(xxx);2、如果为json数组(注意:最外是中括号)string xxx = "[{"count":"1","Product_Code":"14003949","Product_Name":"聚丙烯树脂","Product_Batch":"20140228D8103","Certification_Code":"SCSH20140226-001-01","Plate_Code":"L5E-89","Grade":"合格品","WarehouseIn_Num":"19120.0000000","WarehouseIn_Weight":"478.000","WarehouseIn_Confirm_Date":"2014-03-01"}]";json数组转换为listList<M_WarehouseInResult> whh = JsonConvert.DeserializeObject<List<M_WarehouseInResult>>(xxx);附: public class M_WarehouseInResult { public string count { get; set; } public string Product_Code { get; set; } public string Product_Name { get; set; } public string Product_Batch { get; set; } public string Certification_Code { get; set; } public string Plate_Code { get; set; } public string Grade { get; set; } public string WarehouseIn_Num { get; set; } public string WarehouseIn_Weight { get; set; } public string WarehouseIn_Confirm_Date { get; set; } }
2023-06-26 04:54:371

C#如何实现图片文件与数据流的转换

C#如何实现图片文件与数据流的转换 需要使用文件流进行处理以下是参考的代码://处理图像 string fileNmae=string.Empty; OpenFileDialog openFileDialog1 = new OpenFileDialog(); if (openFileDialog1.ShowDialog() == DialogResult.OK) { fileNmae = openFileDialog1.FileName; } else { fileNmae = @"d:对联1.jpg"; } FileStream fs = new FileStream(fileNmae, FileMode.Open, FileAccess.Read); Byte[] bytPic = new Byte[fs.Length]; fs.Read(bytPic, 0, bytPic.Length); fs.Close();数据流可以存储到数据库中,参考代码: command.Parameters["@pic"].Value = bytPic; connection.Open(); command.ExecuteNonQuery();
2023-06-26 04:54:462

c#从数据库中读取图片出现参数无效拜托了各位 谢谢

MemoryStream myStream = new MemoryStream(mybyte); foreach就可以省了。 一般我用他读datarow没试过读dgv,dgv dgv可以绑定datatable,操作起来很省事。
2023-06-26 04:55:072

引发类型为“System.OutOfMemoryException”的异常。

内部调用 MemoryStream 的 set_Capacity 时,在申请新内存时失败,可能是需要存储到ViewState中的内容太过庞大,或者可用内存太少。导致尝试将数据序列化写入ViewState时内存溢出。
2023-06-26 04:55:141

WebService 序列化反序列化 反悔自定义对象错误,各路大侠来看看。

WebService会把 你数据Model层的所有对象映射到 WebService, 实际上是新的类型,当然不能直接转换。 你应该 用 WebService层中的 yhModel 类型而不是数据层中的该类型
2023-06-26 04:55:331

C#MemoryStream.Dispose之后 为什么仍可以ToArray

事件起因,一哥们在群里面贴出了类似下面这样的一段代码:view sourceprint?01.1 class Program02.2 {03.3 static void Main(string[] args)04.4 {05.5 byte[] buffer = File.ReadAllBytes("test.txt"); 06.6 MemoryStream ms = new MemoryStream(buffer);07.7 ms.Dispose();08.8 Console.WriteLine(ms.ToArray().Length);09.9 Console.Read();10.10 }11.11 }
2023-06-26 04:55:401

内存流不可扩展 原因有哪些?

内存流不可扩展用户代码未处理 System.NotSupportedExceptionMessage=内存流不可扩展。StackTrace:位于 System.IO.MemoryStream.set_Capacity(Int32 value)位于 System.IO.MemoryStream.EnsureCapacity(Int32 value)位于 System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count)位于 Saluse.MediaKit.IO.SeekableStream.FillMemoryStreamFromSourceStream(Object state)位于 Saluse.MediaKit.IO.SeekableStream..ctor(Stream sourceStream, Int64 predeterminedLength)位于 Saluse.MediaKit.Sample.iAudioxSilverLightVer1.<BeginFetchAudiob__e(IAsyncResult ar)位于 System.Net.Browser.ClientHttpWebRequest.<c__DisplayClass1a.<InvokeGetResponseCallbackb__18(Object state2)位于 System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)位于 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)位于 System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()位于 System.Threading.ThreadPoolWorkQueue.Dispatch()
2023-06-26 04:56:051

delphi中关于TMemoryStream中CopyFrom的错误!delphi7与delphi2010上的区别?

MemoryStream的Size有多大??应该是0吧?
2023-06-26 04:56:122

C#从数据库从读取图片

MemoryStreamstream=newMemoryStream(im,0,im.Length);试下,还有种情况可能数据库里存放的不是图片的2进制数据
2023-06-26 04:56:205

C#读出SQL数据库中存储的图片到picturebox

http://wenku.baidu.com/view/156f8ced4afe04a1b071de20.html 这里有你要的答案,不过我建议你不要这么做,数据库里只要保存图片路径就好了。
2023-06-26 04:56:342

C#语言中 memStream.Position = 0;是什么意思?

Position 获取或设置流中的当前位置。
2023-06-26 04:56:473

bitmap图片转换成二进制

1、先把位图保存在一个MemoryStream流里,再把这个流转成byte数组。Bitmap.Save(Stream,格式)Stream.ToArray()2、同样道理,先用一个byte数组获得二进制,再把byte数组写入MemoryStream流,然后用这个流实例化位图。MemoryStream(byte[])Bitmap(MemoryStream)
2023-06-26 04:56:541

C# zlib字符串解压

请问你的zlib 和 CopyStream是什么东西 我不懂诶 ! 我不知道他们是干吗的啊! 囧....
2023-06-26 04:57:022

C# SQL 读取图片二进制编码问题

显示图片在控件上:MemoryStreamms=newMemoryStream(SSI.ShowPicture);ms.Position=0;Imageimg=Image.FromStream(ms);pbShowPicture.Image=img; ms.Close();保存图片(二进制数据)到数据库:using(Bitmapbitmap=newBitmap(pbShowPicture.Image)){ using(MemoryStreamms=newMemoryStream()){ bitmap.Save(ms,ImageFormat.Bmp);byte[]bytes=ms.GetBuffer();_ssi.ShowPicture=bytes;//_ssi为实体对象}}
2023-06-26 04:57:081

MemoryStream和filestream有什么区别

看名字就知道了,具体可以上百度百科查,很详细
2023-06-26 04:57:342

如何把stream转成MemoryStream

不可能直接转的,需要从Stream把数据读出来,写入MemoryStream。MemoryStream ms = new MemoryStream();byte[] buffer = new byte[1024];while(true) {int sz = inStream.Read(buffer, 0, 1024);if (sz == 0) break;ms.Write(buffer, 0, sz);}ms.Position = 0;return ms;
2023-06-26 04:57:411

请教FileStream 如何转换为 MemoryStream

你好。using(FileStream fs = File.OpenRead(filePath)){ int length = (int)fs.Length; byte[] data = new byte[length]; fs.Position = 0; fs.Read(data, 0, length); MemoryStream ms = new MemoryStream(data);}还可以直接用 File.ReadAllBytes(filePath) 这样更简单。byte[] data = File.ReadAllBytes(filePath);MemoryStream ms = new MemoryStream(data);如果我的回答没能帮助您,请继续追问。
2023-06-26 04:57:541

请教FileStream 如何转换为 MemoryStream

using(FileStream fs = File.OpenRead(filePath)){ int length = (int)fs.Length; byte[] data = new byte[length]; fs.Position = 0; fs.Read(data, 0, length); MemoryStream ms = new MemoryStream(data);}还可以直接用 File.ReadAllBytes(filePath) 这样更简单。byte[] data = File.ReadAllBytes(filePath);MemoryStream ms = new MemoryStream(data);
2023-06-26 04:58:011

C#中文件和byte[]互换问题

【问题】:如何将图片和声音转化成byte[],并通过webservice进行传输?如何将webservice传输过来的byte[],转化成我们想要的文件?(一)文件转化为byte[]方法一:使用MemoryStream(MemoryStream的数据来自内存中缓冲区)System.IO.MemoryStream m = new System.IO.MemoryStream();System.Drawing.Bitmap bp = new System.Drawing.Bitmap(pname );bp.Save(m, System.Drawing.Imaging.ImageFormat.Jpeg);//将此图像以指定的格式保存到指定的流中。byte[] b = m.GetBuffer();//从内存缓冲区中读取方法二:使用FileStream(FileStream对象的数据来自文件)FileStream stream = new FileInfo(path).OpenRead();Byte[] buffer = new Byte[stream.Length];//从流中读取字节块并将该数据写入给定缓冲区buffer中stream.Read(buffer, 0, Convert.ToInt32(stream.Length));(二)将byte[]转化成文件WebReference.MyService obj = new WebReference.MyService();Byte[] b = obj.downWav ("1001");//1001某条记录的pid,返回这条记录中的图片的byte[]MemoryStream m = new MemoryStream(b);string file =string.Format(@"{0}e.wav",Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase));//将下载下来的文件放在当前目录下,保存为e.wav;当然如果是图片,可以保存为a.jpgFileStream fs = new FileStream(file, FileMode.OpenOrCreate);m.WriteTo(fs);m.Close();fs.Close();m = null;fs = null;
2023-06-26 04:58:081

delphi 怎样清空memorystream

楼主你好。把起始/结束标志串存到byte数组,然后CompareMem对比stream,找出起始结束点,再copy到新stream不就行了!
2023-06-26 04:58:151

把object数组转为内存流的问题?

//【客户端】//这是你的object数组Object[]objArray=newObject[10];//内存流(需要引用System.IO)MemoryStreamms=newMemoryStream();//序列化(需要引用System.Runtime.Serialization.Formatters.Binary)BinaryFormatterbf=newBinaryFormatter();//将数据保存到内存流bf.Serialize(ms,objArray);//【服务端】MemoryStreammsGet;//你通过自己的方法获取到内存流BinaryFormatterbfServer=newBinaryFormatter();//反序列化,得到数据Object[]getObjectArray=(Object[])bf.Deserialize(msGet);
2023-06-26 04:58:221

用C#编程实现读写Binary

本文给出一个用 C# 编程实现读写 Binary 的实例代码以下是引用片段://返回blob数据public MemoryStream getBlob(string SQL)...{try...{Db_Conn();cmd = new OleDbCommand(SQL, Conn);cmd.CommandType = CommandType.Text;//是sqlOleDbDataReader Rs = cmd.ExecuteReader();if (Rs.Read()) //循环到下一条记录...{if (!(Rs.GetValue(0) is System.DBNull))...{byte[] image_bytes = (byte[])Rs.GetValue(0);MemoryStream ms = new MemoryStream(image_bytes);return ms;}elsereturn null;}elsereturn null;}finally...{this.close();}}//设置blobpublic bool SetBlob(string SQL, MemoryStream Ms)...{try...{Db_Conn();cmd = new OleDbCommand(SQL, Conn);cmd.CommandType = CommandType.Text;//是sqlint n=Convert.ToInt32(Ms.Length.ToString());Ms.Position = 0;byte[] pReadByte = new Byte[n];Ms.Read(pReadByte, 0, n);cmd.Parameters.Add("BLOB", OleDbType.Binary).Value = pReadByte;cmd.ExecuteNonQuery();return true;}catch (Exception ex)...{MessageBox.Show("错误:因" + ex.Message + ",无法执行:" + SQL);return false;}finally...{this.close();}}调用 getBlob以下是引用片段:String sqlStr = "select content from dp where id=" + ID;//content为dp中的BLOB字段,ID为主键MemoryStream ms = DBClass.getBlob(sqlStr);if (ms == null)richTextBox.Clear();else...{if (ms.Length0)...{ms.Position = 0;try...{richTextBox.LoadFile(ms, RichTextBoxStreamType.RichText);}catch...{richTextBox.LoadFile(ms, RichTextBoxStreamType.PlainText);}}elserichTextBox.Clear();}调用setBlob以下是引用片段:String sqlStr = "update dp set content=:BLOB where id=" + ID;MemoryStream ms = new MemoryStream();richTextBox.SaveFile(ms, RichTextBoxStreamType.RichText);if (!DBClass.SetBlob(sqlStr, ms))...{MessageBox.Show("保存失败");}
2023-06-26 04:58:281

C# stream 读取数据,stream长度不为0,为什么不能read?streamFrom传入的为MemoryStream

streamFrom.Position = 0;
2023-06-26 04:58:471

Stream 怎么操作

常见并常用的stream一共有文件流(FileStream),内存流(MemoryStream),压缩流(GZipStream),加密流(CrypToStream),网络流(NetworkStream);1.文件流(读取文件流-输出文件流)FileStreamusing(Streamstreamwrite=new FileStream(@"D:BaiduYunDownload45.avi",FileMode.OpenOrCreate)){using (Stream streamread = new FileStream(@"D:BaiduYunDownloadxiawu3.avi", FileMode.Open)){ byte[] ss=new byte[1024*1024*4];int len;while ((len = streamread.Read(ss, 0, ss.Length)) > 0){streamwrite.Write(ss, 0, len);Thread.Sleep(1000);}}}2. 内存流(MemoryStream)string strtxt="dasdfdsfsd";byte[] bytetxt = Encoding.UTF8.GetBytes(strtxt);Stream memstream = new MemoryStream();memstream.Write(bytetxt, 0, bytetxt.Length);3.压缩流(GZipStream),压缩:string s = "dfdfdf";using (FileStream filestream = File.OpenWrite(@"c:2.txt")){using (GZipStream zipstream = new GZipStream(filestream, CompressionMode.Compress)){byte[] bytes = Encoding.UTF8.GetBytes(s);zipstream.Write(bytes, 0, bytes.Length);}}解压:using (FileStream filestream = File.OpenRead(@"c:2.txt")){using (GZipStream zipstream = new GZipStream(filestream, CompressionMode.Decompress)){using (FileStream filestreamwrite = new FileStream(@"c:3.txt", FileMode.OpenOrCreate)){byte[] bytes = new byte[1024 * 1024 * 4];int length;while ((length = zipstream.Read(bytes, 0, bytes.Length)) > 0){filestreamwrite.Write(bytes, 0, length);}}}}
2023-06-26 04:58:551

winform上传图片跟id到服务器上面去,而且图片要转为二进制具体怎么写?求大神

写:FileStream fs = new FileStream("图片路径", FileMode.Open);Byte[] imagebytes = new byte[fs.Length]; //二进制转换BinaryReader br = new BinaryReader(fs);imagebytes = br.ReadBytes(Convert.ToInt32(fs.Length)); //读取二进制流读://dr["content_"]为数据库保存的二进制图片数据MemoryStream ms = new MemoryStream((byte[])dr["content_"]);//把照片读到MemoryStream里 Image imageBlob = Image.FromStream(ms, true);//用流创建Image pictureBox1.Image = imageBlob;//输出图片
2023-06-26 04:59:011

类型为 System.OutOfMemoryException 的异常。 如何解决

异常详细信息: System.OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。 源错误:执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。 堆栈跟踪:[OutOfMemoryException: 引发类型为“System.OutOfMemoryException”的异常。] System.IO.MemoryStream.set_Capacity(Int32 value) +63 System.IO.MemoryStream.EnsureCapacity(Int32 value) +55 System.IO.MemoryStream.WriteByte(Byte value) +122 System.IO.BinaryWriter.Write(Byte value) +21 System.Web.UI.ObjectStateFormatter.SerializeValue(SerializerBinaryWriter writer, Object value) +1199 [ArgumentException: 序列化类型“System.Int32”的值“120658”时出错。] System.Web.UI.ObjectStateFormatter.SerializeValue(SerializerBinaryWriter writer, Object value) +3395 System.Web.UI.ObjectStateFormatter.Serialize(Stream outputStream, Object stateGraph) +110 System.Web.UI.ObjectStateFormatter.Serialize(Object stateGraph) +57 System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Serialize(Object state) +4 System.Web.UI.Util.SerializeWithAssert(IStateFormatter formatter, Object stateGraph) +37 System.Web.UI.HiddenFieldPageStatePersister.Save() +79 System.Web.UI.Page.SavePageStateToPersistenceMedium(Object state) +105 System.Web.UI.Page.SaveAllState() +236 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1099 版本信息: Microsoft .NET Framework 版本:2.0.50727.3615; ASP.NET 版本:2.0.50727.3614
2023-06-26 04:59:081

c#方法没有重载参数BeginReceive方法没有重载3个参数代码如何修改

clientSocket.Receive( bytesReceived,bytesReceived.Length, 0)用Receive方法。while需要用同步方法。
2023-06-26 04:59:151

c# vs2005保存数据到database时加密的代码如何实现?

其实实现很简单,给你一个加密的类吧写入数据库前用MD5加密,读取出来后,再用MD5解密,非常简单 usingSystem.Security.Cryptography; using System.IO; using System.Text;///MD5加密 publicstringMD5Encrypt(string pToEncrypt, string sKey) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt); des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder(); foreach(byte b in ms.ToArray()) { ret.AppendFormat("{0:X2}", b); } ret.ToString(); return ret.ToString(); } ///MD5解密 publicstringMD5Decrypt(string pToDecrypt, string sKey) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); byte[] inputByteArray = new byte[pToDecrypt.Length / 2]; for(int x = 0; x < pToDecrypt.Length / 2; x++) { int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)); inputByteArray[x] = (byte)i; } des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder(); return System.Text.Encoding.Default.GetString(ms.ToArray()); }
2023-06-26 04:59:291

请问DES加密算法中的这3个函数(获取密钥函数,加密函数与解密函数)的含义是什么(附函数算法)

/// <summary> /// DES密钥 /// </summary> private const string KEY_64 = "11111111";//注意了,是8个字符,64位 /// <summary> /// DES向量 /// </summary> private const string IV_64 = "11111111"; /// <summary> /// 加密DES /// </summary> /// <param name="data">需要加密的字符串</param> /// <returns>加密后的字符串</returns> public static string EncodeDES(string data) { byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); int i = cryptoProvider.KeySize; MemoryStream ms = new MemoryStream(); CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write); StreamWriter sw = new StreamWriter(cst); sw.Write(data); sw.Flush(); cst.FlushFinalBlock(); sw.Flush(); return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); } /// <summary> /// 解密DES /// </summary> /// <param name="data">需要解密的字符串</param> /// <returns>解密后的字符串</returns> public static string DecodeDES(string data) { byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(KEY_64); byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(IV_64); byte[] byEnc; try { byEnc = Convert.FromBase64String(data); } catch { return null; } DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); MemoryStream ms = new MemoryStream(byEnc); CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read); StreamReader sr = new StreamReader(cst); return sr.ReadToEnd(); }
2023-06-26 04:59:391

C# 无法将类型为“System.Byte[]”的对象强制转换为类型“System.Data.DataTable

他俩类型不匹配。你得转换一下类型。
2023-06-26 04:59:463

怎么将一个数组序列化与反序列化????越详细越好!!!可以加分

//序列化 string[] arr = {"a", "b", "c"}; System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(string[])); System.IO.MemoryStream mem = new MemoryStream(); System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(mem, Encoding.Default); ser.Serialize(writer, arr); writer.Close(); string 序列后的结果 = Encoding.Default.GetString(mem.ToArray()); mem.Dispose(); //反序列化 System.Xml.Serialization.XmlSerializer dser = new System.Xml.Serialization.XmlSerializer(typeof(string[])); StreamReader mem2 = new StreamReader(new MemoryStream(System.Text.Encoding.Default.GetBytes(序列后的结果)), System.Text.Encoding.Default); string[] arr2 = (string[])dser.Deserialize(mem2);
2023-06-26 04:59:551