我如何获得任务流的长度(文件大小)

How can i get length (file size) of a task stream

我的主要要求是获取任务流的长度(文件大小) System.Threading.Tasks.Task<System.IO.Stream>。在内存流中,我曾经使用 "stream.Result.Length" 获取文件大小,但是当我尝试在任务流中使用相同的文件时,它会抛出一个异常 System.NotSupportedException,似乎流不支持 [=21] =].我认为内存流和其他流是有区别的。

Exception occurred handling notification:System.NotSupportedException: This stream does not support seek operations.

你能给我任何指示吗我怎样才能做到这一点 我发现这个 link 给了我说明。我正在使用 .Net 3.5,因此我不能使用 .Net 4

中的 ConvertTo() 函数

流的要点在于,您无需准备好所有可用数据即可开始处理它的第一部分。 MemoryStream 是一个例外,因为它确实同时在内存中拥有流的全部内容,因此它可以 "support seek operations" 告诉您流有多大等信息。

如果您需要无法搜索的流的完整大小,您将不得不消耗整个流才能找到它。如果流总是相对较小,您可以 copy its contents into a MemoryStream。如果要变大,您可以将其内容复制到磁盘上的文件中。

您可能想要检查为什么您需要知道长度。例如,如果这样你就可以取消太大的上传,那么也许你应该开始分块处理上传,但在每条数据进来后检查你到目前为止收到了多少数据,然后取消如果它变得太大,请处理。