我的主要要求是获取任务流的长度(文件大小) System.Threading.Tasks.Task<System.IO.Stream>
。在内存流中,我习惯使用&#34; stream.Result.Length&#34;来获取文件大小。但是当我试图在任务流中使用相同的内容时,它会抛出一个异常System.NotSupportedException
,似乎该流不支持该属性。我认为内存流和其他流之间存在差异。
处理通知发生异常:System.NotSupportedException: 此流不支持搜索操作。
您能否告诉我如何实现这一目标? 我发现这个link给了我指示。我正在使用.Net 3.5因此我无法使用.Net 4中的ConvertTo()函数
答案 0 :(得分:1)
流的重点是,在开始处理第一部分之前,您不需要拥有所有可用数据。 MemoryStream是一个例外,因为它确实在内存中同时拥有了流的全部内容,因此它可以支持搜索操作&#34;告诉你像溪流有多大的东西。
如果您需要无法搜索的流的完整大小,那么您将不得不使用整个流来查找该流。如果流总是相对较小,您可以copy its contents into a MemoryStream。如果它变得更大,你可以将其内容复制到磁盘上的文件中。
您可能需要检查为什么您需要知道长度。例如,如果它可以取消过大的上传,那么您可能只是开始处理上传的数据块,但是在每个数据进入之后检查您收到了多少数据到目前为止,如果过程太大,请取消该过程。