我怎样才能得到一个任务流的长度(文件大小)

本文关键字:一个 任务 文件大小 | 更新日期: 2023-09-27 18:18:51

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

异常发生处理通知:System。NotSupportedException:由于这个流不支持seek操作。

你能告诉我怎样才能做到这一点吗我找到了这个链接,它给了我说明。我正在使用。net 3.5,因此我不能使用。net 4中的ConvertTo()函数

我怎样才能得到一个任务流的长度(文件大小)

流的意义在于,在开始处理它的第一部分之前,您不需要拥有所有可用的数据。MemoryStream是一个例外,因为它确实同时在内存中拥有流的全部内容,所以它可以"支持查找操作"来告诉你流有多大。

如果你需要一个不能查找的流的完整大小,你将不得不消耗整个流来找到它。如果流总是相对较小,您可以将其内容复制到MemoryStream中。如果它要更大,您可以将其内容复制到磁盘上的一个文件中。

你可能想检查为什么你需要知道长度。例如,如果您可以取消太大的上传,那么也许您应该开始以块方式处理上传,但在每个数据块进入后检查到目前为止接收了多少数据,如果数据太大则取消该进程。