Tag: stream

我可以直接从HttpResponseMessage流式传输到文件而无需通过内存吗?

我的程序使用HttpClient向Web API发送GET请求,并返回一个文件。 我现在使用此代码(简化)将文件存储到光盘: public async Task DownloadFile() { var client = new HttpClient(); var uri = new Uri(“http://somedomain.com/path”); var response = await client.GetAsync(uri); if (response.IsSuccessStatusCode) { var fileName = response.Content.Headers.ContentDisposition.FileName; using (var fs = new FileStream(“C:\test\” + fileName, FileMode.Create, FileAccess.Write, FileShare.None)) { await response.Content.CopyToAsync(fs); return true; } } return false; } 现在,当此代码运行时,该进程会将所有文件加载到内存中。 我实际上宁愿期望流从HttpResponseMessage.Content流式传输到FileStream,因此只有一小部分流被保存在内存中。 我们计划在大文件(> 1GB)上使用它,那么有没有办法在没有内存中的所有文件的情况下实现它? […]

如何使用WCF从客户端向服务器发送大文件?

如何在C#中使用WCF从客户端向服务器发送大文件? 在配置代码下面。

用于网络流的虚拟摄像机/直接显示filter

我正在使用Flash Live Encoder。 它使用相机来播放video。 支持论坛说我可以创建自定义直接显示filter并流式传输我需要的数据。 我不明白直接显示filter将如何显示在实时编码器的源列表中。 我尝试使用一些商业虚拟相机,它工作正常,但它不能使用网络流源。 摘要。 我有几个网络流。 我认为我必须为每个人创建虚拟摄像头。 但是,如果我在C#上找到带有直接显示filter的示例,我找不到虚拟相机。

是Stream.Copy管道吗?

假设我正在编写tcp代理代码。 我正在读取传入的流并写入输出流。 我知道Stream.Copy使用缓冲区,但我的问题是:Stream.Copy方法在从输入流中获取下一个块时是否写入输出流,或者它是一个循环,如“从输入读取块,将块写入输出,从输入中读取块等“?

上下文中没有响应? 怎么解决?

我将pdf文件保存为流。 我想将流保存到Response流。 但它总是抛出错误:上下文中没有响应。 这是代码: using System; using System.Threading; using System.IO; using Spire.Pdf; namespace SingleThreadTest { public partial class Test : System.Web.UI.Page { //[STAThread] protected void Page_Load(object sender, EventArgs e) { } [STAThread] protected void Button1_Click(object sender, EventArgs e) { ////new a thread ThreadStart threadStart = HTMLToPDF; Thread thread = new Thread(threadStart); thread.SetApartmentState(ApartmentState.STA); thread.Start(); } void […]

如何将流的子部分公开给用户

我有一个包含许多数据的流。 我想在另一个流中公开一段数据。 我想要提取的数据通常超过100mb。 由于我已经拥有数据流,因此将数据复制到另一个流并返回它似乎是一种浪费。 我正在寻找的是一种方法来引用第一个流中的数据,同时控制第二个流可以引用的数量。 这可能吗

了解Streams及其生命周期(Flush,Dispose,Close)

注意:我已经阅读了以下两个问题: 你能解释一下溪流的概念吗? C#使用流 我在C#中编码 在几乎所有使用流的代码示例中,几乎总是调用.Dispose(),.Flush(),.Close()。 在流的概念中,完成了什么? 如果我不处理存储在变量中的流,我的应用程序是否泄漏到某处? 为什么我需要调用这些函数中的任何一个? 我见过没有这样做的代码示例仍然可以完成工作(没有明显的破损) 我正在我的应用程序中构建一个类,它包含一个主方法(让我们称之为GetStream() ),它通过myWebRequest.GetResponse().GetResponseStream()返回一个流myWebRequest.GetResponse().GetResponseStream() 主要方法GetStream()返回一个Stream对象,该对象可用于需要流的任何操作(StreamReader,Bitmap()等)。 有没有办法让流在最后一次使用后自动处理(垃圾收集?),而不强迫任何人调用.GetStream()来手动处理它? 你可能会说,我的问题很模糊和笼统。 我对流的理解并不牢固,所以任何链接到有用的文章,提供更深入的视图流,而不是SO问题可以提供。

C#gif图像到MemoryStream并返回(丢失动画)

我有一个小问题,我找不到任何解决方案。 我想将GIF转换为byte []然后再转换为GIF。 我工作正常,但我失去了动画。 当我开始时它是一个完美的动画GIF(我在PictureBox元素中显示它)。 但转换后我陷入第一帧。 HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(“creativetechs.com/i/tip_images/ExampleAnimation.gif”); HttpWebResponse httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse(); Stream stream = httpWebReponse.GetResponseStream(); Image img = Image.FromStream(stream); MemoryStream ms = new MemoryStream(); img.Save(ms,img.RawFormat); byte [] bytes = ms.ToArray(); Image img2 = Image.FromStream(new MemoryStream(bytes)); int frames1 = img.GetFrameCount(System.Drawing.Imaging.FrameDimension.Time); int frames2 = img2.GetFrameCount(System.Drawing.Imaging.FrameDimension.Time); 我也尝试使用不是RawFormat而是使用System.Drawing.Imaging.ImageFormat.Gif 。 没改变一件事。 frames1是正确的帧数。 frames2是1。 我的GUI中有2个PictureBox元素。 一个显示img ,另一个显示img2 。 […]

当BinaryReader打开时使用Stream.Seek是否安全?

由于BinaryReader的底层缓冲策略,我不清楚是否可以读取存储在流中的偏移量,然后在此偏移处重新定位流以恢复流式传输。 例如,以下代码可以: using (var reader = new CustomBinaryReader(inputStream)) { var offset= reader.ReadInt32(); reader.BaseStream.Seek(offset, SeekOrigin.Begin); //Then resume reading the streaming } 或者我应该在寻找流之前关闭第一个二进制阅读器,然后重新打开第二个阅读器? int offset; using (var firstReader = new CustomBinaryReader(inputStream)) { offset= firstReader.ReadInt32(); } inputStream.Seek(offset, SeekOrigin.Begin); using (var secondReader = new CustomBinaryReader(inputStream)) { //Then resume reading the streaming }

内存流是否像文件流一样阻塞

我正在使用一个库,需要我提供一个实现此接口的对象: public interface IConsole { TextWriter StandardInput { get; } TextReader StandardOutput { get; } TextReader StandardError { get; } } 然后,对象的读者将被库使用: IConsole console = new MyConsole(); int readBytes = console.StandardOutput.Read(buffer, 0, buffer.Length); 通常,实现IConsole的类具有来自外部进程的StandardOutput流。 在这种情况下,console.StandardOutput.Read通过阻塞来调用,直到有一些数据写入StandardOutput流。 我要做的是创建一个测试IConsole实现,该实现使用MemoryStreams和echo在StandardInput上显示的任何内容返回到StandardInput。 我试过了: MemoryStream echoOutStream = new MemoryStream(); StandardOutput = new StreamReader(echoOutStream); 但问题是console.StandardOutput.Read将返回0而不是阻塞,直到有一些数据。 无论如何,如果没有可用数据或者我可以使用的内存流有什么不同,我可以得到一个MemoryStream来阻止吗?