Tag:

从流加载图像而不保持流打开

是否可以使用System.Drawing.Image的FromStream方法而不必在图像的生命周期内保持流打开? 我有一个应用程序,它使用Image.FromStream和Assembly.GetManifestResourceStream的组合从资源文件加载一堆工具栏图形。 我遇到的问题是,虽然这在Windows 7上工作正常,但在Windows XP上,如果禁用链接到其中一个图像的用户界面元素,应用程序将崩溃。 在Windows 7上,图像以灰度渲染。 在XP上,它因内存不足而崩溃。 经过大量的长毛发后,我终于将它追溯到图像的初始加载。 当然,如果我创建任何实现IDisposable对象也在同一个方法中被销毁,我将它包装在using语句中,例如 using (Stream resourceStream = assembly.GetManifestResourceStream(resourceName)) { image = Image.FromStream(resourceStream); } 如果我删除using语句以便不处理流,则应用程序不再在XP上崩溃。 但我现在有一堆“孤儿”流 – 图像存储在命令类中,这些图像在处理时正确处理图像,但原始流不是。 我查看了FromStream的文档,确认了流需要保持打开状态。 为什么这个没有在Windows 7开发系统上崩溃和烧毁是一个谜! 我真的不希望这个流徘徊,我当然不希望存储对这个流以及图像的引用,以便我以后可以处理它。 我只需要那个流一次所以我想摆脱它:) 是否有可能创建图像,然后在那里杀死流?

C# – 如何读写二进制文件?

如何从任何文件中读取原始字节数组,并将该字节数组写回新文件?

使用高质量video流开发video聊天应用程序

我在一家公司工作,我们正在开发现有应用程序的video聊天支持。 我已经看过各种解决方案了 使用Managed Direct节目在C#中进行video捕获和流式传输 在代码项目中的一些代码示例我们拍摄图像并通过网络传递(我称之为粗略的解决方案,因为这会占用大量带宽。 从头开始编写压缩算法并使用它来压缩 – 解压缩video。 现在的挑战是我们希望实现非常高质量的video流,并且容器应用程序使用C#.NET编码 这是我到目前为止提出的。 流数据的网络逻辑用C#编写,video压缩用VC ++编写,并尽可能使用pinvoke或CLI调用VC ++ dll。 我正在寻找一个在这个领域更有经验的人,他可以建议我,如果我正确或者仍然可以改进。 最终目标是高质量的video流。 编解码器可以是h.2633,h.264等任何东西。

iTextSharp + FileStream =损坏的PDF文件

我正在尝试使用iTextSharp创建一个pdf文件。 我的尝试将pdf的内容写入MemoryStream,因此我可以将结果写入文件和数据库BLOB。 文件被创建,大小约为21kB,当使用Notepad ++打开时,它看起来像一个pdf。 但是我的PDF查看器说它已经被破坏了。 这是一个小代码片段(只尝试写入文件,而不是数据库): Document myDocument = new Document(); MemoryStream myMemoryStream = new MemoryStream(); PdfWriter myPDFWriter = PdfWriter.GetInstance(myDocument, myMemoryStream); myDocument.Open(); // Content of the pdf gets inserted here using (FileStream fs = File.Create(“D:\\…\\aTestFile.pdf”)) { myMemoryStream.WriteTo(fs); } myMemoryStream.Close(); 我犯的错误在哪里? 谢谢你,诺伯特

从流中读取数据的最有效方法

我有一个使用对称加密来加密和解密数据的算法。 无论如何,当我要解密时,我有: CryptoStream cs = new CryptoStream(ms, cryptoTransform, CryptoStreamMode.Read); 我必须从cs CryptoStream中读取数据并将该数据放入一个字节数组中。 所以一种方法可能是: System.Collections.Generic.List myListOfBytes = new System.Collections.Generic.List(); while (true) { int nextByte = cs.ReadByte(); if (nextByte == -1) break; myListOfBytes.Add((Byte)nextByte); } return myListOfBytes.ToArray(); 另一种技术可能是: ArrayList chuncks = new ArrayList(); byte[] tempContainer = new byte[1048576]; int tempBytes = 0; while (tempBytes < 1048576) { tempBytes = […]

System.IO.FileStream FileAccess vs FileShare

我已经搜遍过,但找不到这个问题的答案。 据我所知, FileAccess处理机器上的文件访问, FileShare处理共享,但我无法找到它是如何组合以及它们如何相互影响的解释。 例如,如果我有 using ( FileStream fs = new FileStream( pathName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) ) 这是否意味着机器上的用户只能读取文件,而远程访问文件夹的用户可以读取和写入文件? 此外,使用会产生什么影响 using ( FileStream fs = new FileStream( pathName, FileMode.Open, FileAccess.Read ) ) 我还没有指定FileShare?

如何从流中读取Access文件(.accdb)?

我问了两个类似的问题: 使用OLEDB将AccessFile从Stream读取到DataSet 通过OpenXML SDK读取Microsoft Access文件(.accdb) 我的所有尝试都是从流中读取Access文件(.accdb)。 我曾尝试使用OLEDB和OpenXML SDK,但似乎没有人能够访问流。 那么,有人知道吗? 或者是否有任何其他解决方案从流中读取Access文件?

File.ReadLines没有锁定它?

我可以打开一个FileStream new FileStream(logfileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 没有锁定文件。 我可以用File.ReadLines(string path)做同样的事情吗?

如何将两个System.Io.Stream实例连接成一个?

让我们想象一下,我想将三个文件连续传输给一个用户,但是不是他给我一个Stream对象来推送字节,我必须给他一个Stream对象,他将从中提取字节。 我想获取我的三个FileStream对象(甚至更聪明,一个IEnumerable )并返回一个新的ConcatenatedStream对象,该对象将根据需要从源流中提取。

如何在c#中将大文件拆分成块?

我正在通过电线制作一个简单的文件传输发送器和接收器应用程序。 到目前为止,我发送的是发送方将文件转换为字节数组,并将该数组的块发送给接收方。 这适用于高达256mb文件,但上面的任何内容,行: byte[] buffer = StreamFile(fileName); //This is where I convert the file Throws a System out of memory exception. 我正在寻找一种方法来读取块中的文件然后写入该块而不是将整个文件加载到一个byte 。 我怎么能用FileStream做到这一点? 编辑: 对不起,到目前为止,这是我糟糕的代码: private void btnSend(object sender, EventArgs e) { Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); byte[] fileName = Encoding.UTF8.GetBytes(fName); //file name byte[] fileData = null; try { fileData = StreamFile(textBox1.Text); […]