Tag: stream

在C#中将流转换为FileStream

使用C#将Stream转换为FileStream的最佳方法是什么? 我正在处理的函数有一个传递给它的Stream包含上传的数据,我需要能够执行stream.Read(),stream.Seek()方法,这些方法是FileStream类型的方法。 一个简单的演员阵容不起作用,所以我在这里寻求帮助。

Stream.Length抛出NotSupportedException

我在尝试stream.Length发送到我的WCF方法的Stream对象时遇到错误。 Unhandled Exception! Error ID: 0 Error Code: Unknown Is Warning: False Type: System.NotSupportedException Stack: at System.ServiceModel.Dispatcher.StreamFormatter.MessageBodyStream.get_Length() 你如何获得流的长度? 任何例子?

GZipStream压缩问题(丢失字节)

我对GZip Serializer有一些奇怪的问题。 尝试使用数据序列化对象。 以下代码给出结果( 在调试中的POINT1 ):ms.Length = 100028和uncompressedStream.Length = 100027 POINT1之后有exception“解析完成之前遇到的流结束。”,我认为是这个丢失字节的结果。 我正在使用.net 4.0。 //generating data int length = 100000; byte[] data = new byte[length]; for (int i = 0; i < length; i++) { data[i] = System.Convert.ToByte(i % 100 + i % 50); } //serialization into memory stream IFormatter formatter = new BinaryFormatter(); var ms […]

使用TcpListener取消NetworkStream.ReadAsync

请考虑以下简化示例(准备在LinqPad中滚动,需要提升帐户): void Main() { Go(); Thread.Sleep(100000); } async void Go() { TcpListener listener = new TcpListener(IPAddress.Any, 6666); try { cts.Token.Register(() => Console.WriteLine(“Token was canceled”)); listener.Start(); using(TcpClient client = await listener.AcceptTcpClientAsync() .ConfigureAwait(false)) using(var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5))) { var stream=client.GetStream(); var buffer=new byte[64]; try { var amtRead = await stream.ReadAsync(buffer, 0, buffer.Length, cts.Token); Console.WriteLine(“finished”); } catch(TaskCanceledException) […]

在处理后调用MemoryStream.ToArray()是危险的吗?

在下面的代码中,GC是否有可能清除MemoryStream以使ToArray失败,因为它在using语句之外? private static byte[] getBytes() { MemoryStream ms = null; using (ms = new MemoryStream()) { // … } return ms.ToArray(); }

File.ReadAllLines或Stream Reader

我们可以使用StreamReader或使用File.ReadAllLines来读取文件。 例如,我想将每一行加载到List或string[]以便在每一行上进一步操作。 string[] lines = File.ReadAllLines(@”C:\\file.txt”); foreach(string line in lines) { //DoSomething(line); } 要么 using (StreamReader reader = new StreamReader(“file.txt”)) { string line; while ((line = reader.ReadLine()) != null) { //DoSomething(line); or //save line into List } } //if list is created loop through list here 应用程序遇到不同大小的文本文件。 偶尔可以从几KBs到MBs增长。 我的问题是哪一个是首选方式,为什么一个应该优先于其他方式?

流包装器使Stream可以搜索?

我有一个不可搜索的只读System.IO.Stream实现(并且其Position始终返回0)。 我需要将它发送给在流上执行一些Seek操作(也就是设置Position)的消费者。 这不是一个巨大的寻求 – 比如当前位置的+/- 100。 是否存在现有的Stream包装器,它将为流添加缓冲function以进行简单的Seek操作? 更新:我应该补充一点,我的消费者是NAudio Mp3FileReader。 我真的只需要一种播放(缓慢且无限期)流式MP3的方法。 我认为这是一个错误,NAudio希望能够随意寻找他们的数据源。

如何安全地拦截自定义Owin中间件中的响应流

我正在尝试编写一个简单的OWIN中间件,以拦截响应流。 我想要做的是用自定义的基于Stream的类替换原始流,在那里我将能够拦截对响应流的写入。 但是,我遇到了一些问题,因为我无法知道响应是否已被链中的内部中间件组件完全写入。 永远不会调用Stream的Dispose重写。 所以我不知道什么时候执行我的处理,这应该发生在响应流的末尾。 这是一个示例代码: public sealed class CustomMiddleware: OwinMiddleware { public CustomMiddleware(OwinMiddleware next) : base(next) { } public override async Task Invoke(IOwinContext context) { var request = context.Request; var response = context.Response; // capture response stream var vr = new MemoryStream(); var responseStream = new ResponseStream(vr, response.Body); response.OnSendingHeaders(state => { var resp = […]

使用C#读取RAR文件的内容

有没有办法读取RAR文件的内容(支持多文件RAR是必须的)? 我不想将内容提取到磁盘,只是像流一样读取它。

如何在.NET中拆分(复制)流?

有谁知道我在哪里可以找到Stream splitter实现? 我正在寻找一个Stream,并获得两个独立的流,可以独立读取和关闭,而不会相互影响。 这些流应该返回与原始流相同的二进制数据。 无需实施职位或寻求等……仅转发。 我更喜欢它不只是将整个流复制到内存中并多次提供服务,这对于实现自己来说相当简单。 那里有什么可以做到的吗?