Tag:

在.net 2.0中的两个流之间复制

我一直在使用以下代码来压缩.Net 4.0中的数据: public static byte[] CompressData(byte[] data_toCompress) { using (MemoryStream outFile = new MemoryStream()) { using (MemoryStream inFile = new MemoryStream(data_toCompress)) using (GZipStream Compress = new GZipStream(outFile, CompressionMode.Compress)) { inFile.CopyTo(Compress); } return outFile.ToArray(); } } 但是,在.Net 2.0中,Stream.CopyTo方法不可用。 所以,我试着替换: public static byte[] CompressData(byte[] data_toCompress) { using (MemoryStream outFile = new MemoryStream()) { using (MemoryStream inFile = […]

使用FileStream在C#中打开文件

我正在尝试打开我计划转换为hex的二进制文件但是我遇到了通过FileStream读取文件的问题, private void button1_Click(object sender, EventArgs e) { openFD.Title = “Insert a BIN file”; openFD.InitialDirectory = “C:”; // Chooses the default location to open the file openFD.FileName = ” “; // Iniitalizes the File name openFD.Filter = “Binary File|*.bin|Text File|*.txt”; // FIlters the types of files allowed to by chosen if (openFD.ShowDialog() != DialogResult.Cancel) { […]

图像加载的性能

我已经尝试了几个小时,用各种方法从文件加载图像。 请看看这两种方法: public Image SlowLoad(string path) { return Image.FromFile(path); } public Image FastLoad(string path) { using (MemoryStream ms = new MemoryStream(File.ReadAllBytes(path))) return Image.FromStream(ms); } 第二种方法比2倍快。 我在这里想念的是什么? 为什么会这样? 我简直不能相信.NET开发人员无法使用我编写的方法更快地实现Image.FromFile。 所以=>我错了。 请告诉我在哪里。 为什么第二种方法快2倍? 我的代码完全正确吗? (线程安全等)。 也许Image.FromFile更安全?

如何实现IAsyncOperationWithProgress

我正在将一些自定义.NET流移植到WINRT。 语言是C#。 是否有一些IAsyncOperationWithProgress的示例实现? 由于方法ReadAsync,来自Windows.Storage.Streams的WriteAsync需要它们。 自定义WinRT流实现也受到欢迎。 我发现了一些使用create_async的C示例,但我希望在C#中执行此操作,并且我在Metro框架中找不到create_async。 提前致谢

此流不支持搜索操作。 HttpWebResponse

我正在制作一个通过http下载文件的程序。 我已经下载了,但是我希望能够暂停下载,关闭程序并在以后再次恢复它们。 我知道我从下载它们的位置支持这个。 我正在通过HttpWebResponse下载文件,并使用GetResponseStream将响应读入流中。 当我关闭应用程序并重新启动它时,我不知道如何恢复下载。 我已尝试在流上进行搜索,但它表示不支持。 最好的方法是什么?

MemoryStream.WriteTo(Stream destinationStream)与Stream.CopyTo(Stream destinationStream)

哪一个更好: MemoryStream.WriteTo(Stream destinationStream)或Stream.CopyTo(Stream destinationStream) ?? 我正在谈论没有Buffer的这两种方法的比较,因为我这样做: Stream str = File.Open(“SomeFile.file”); MemoryStream mstr = new MemoryStream(File.ReadAllBytes(“SomeFile.file”)); using(var Ms = File.Create(“NewFile.file”, 8 * 1024)) { str.CopyTo(Ms) or mstr.WriteTo(Ms);// Which one will be better?? } 更新 这是我想要做的: 打开文件[说“X”类型文件] 解析内容 从这里我得到一堆新的流[3~4个文件] 解析一个流 提取成千上万的文件[流是图像文件] 将其他流保存到文件 编辑所有文件 生成新的“X”类型文件。 我写了一些实际工作正常的代码。 但是现在我正在优化代码以提高效率。

如何在浏览器中流式传输Pdf时设置文件名?

不确定如何说出这个问题…欢迎编辑! 无论如何……这里去了。 我目前使用Crystal Reports生成Pdfs并将输出流式传输给用户。 我的代码如下所示: System.IO.MemoryStream stream = new System.IO.MemoryStream(); stream = (System.IO.MemoryStream)this.Report.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); this.Response.Clear(); this.Response.Buffer = true; this.Response.ContentType = “application/pdf”; this.Response.BinaryWrite(stream.ToArray()); this.Response.End(); 此代码运行后,它将Pdf流式传输到浏览器,打开Acrobat Reader。 效果很好! 我的问题是当用户尝试保存文件时,默认为实际文件名…在这种情况下,它默认为CrystalReportPage.pdf。 无论如何我可以设置这个吗? 如果是这样,怎么样? 任何帮助,将不胜感激。

内存流不可扩展

我正在尝试阅读电子邮件附件,并且我收到“内存流无法展开”错误。 我研究了一些,大多数解决方案似乎与动态确定缓冲区的大小有关,但我已经这样做了。 我对内存流不太熟悉,所以我想知道为什么这是一个问题。 谢谢。 foreach (MailMessage m in messages) { byte[] myBuffer = null; if (m.Attachments.Count > 0) { //myBuffer = new byte[25 * 1024]; old way myBuffer = new byte[m.Attachments[0].ContentStream.Length]; int read; while ((read = m.Attachments[0].ContentStream.Read(myBuffer, 0, myBuffer.Length)) > 0) { // error occurs on executing next statement m.Attachments[0].ContentStream.Write(myBuffer, 0, read); } … more […]

如何锁定流?

我有2个post: 线程1正在写入流。 并且线程2正在从该流中读取。 我怎样才能在线程2中锁定线程1以免写入? 所以我可以从流中读取? MemoryStream outputStream= new MemoryStream(); 线程1: stream = System.IO.File.OpenRead(fileToSend); compressor.CompressionMethod = SevenZip.CompressionMethod.Lzma2; compressor.CompressionLevel = SevenZip.CompressionLevel.Fast; compressor.CompressStream(stream, outputStream); 我想从线程2中的输出流中读取。我尝试使用lock(outputStream)和outputStream.Lock(0,outputStream.Lengh)并且两者都不会阻止线程1写入它。 我正在使用sevenZipSharp

如何使用streamreader使用当前编码读取byte

我想用C#读取byte[]和当前的文件编码。 正如在MSDN中编写的那样,当构造函数没有编码时,默认编码将是UTF-8: var reader = new StreamReader(new MemoryStream(data)). 我也试过这个,但仍然把文件作为UTF-8: var reader = new StreamReader(new MemoryStream(data),true) 我需要用当前编码读取byte[] 。