如何在将流保存到磁盘之前计算文件的大小?

3
我有一个场景,需要禁止用户保存文件,只有当目录大小达到指定限制时才能这么做。
该文件将从流中创建。
在将流保存到磁盘之前如何获取文件大小(大致)?
(注意:用户不会提供任何文件或文件路径。我将以byte[]或字符串的形式获取数据。)

如果你有一个byte[]或string,大小将是.Length属性的值,对吗?我有什么遗漏吗? - undefined
3个回答

8
如果您有一个 Stream 对象,您可以使用其 Length 属性(以字节为单位),但并非所有流都支持它(例如,内存和文件流支持,但网络流通常不支持)。
如果您从字节数组 (byte[]) 开始使用,则可以使用其 Length 属性获取字节数。
如果您正在使用字符串,则取决于编码方式。例如,对于 UTF8,您可以使用
int byteCount = System.Text.Encoding.UTF8.GetByteCount(str);

3
如果您正在使用MemoryStream,可以像这样进行操作:
byte[] fileData = stream.ToArray();
var fileSize = fileData.Length;

4
无需将其复制到数组中,只需使用Stream.Length属性即可。 - undefined

0
根据Eli Arbel的答案,您可以使用`Length`属性,在字符串的情况下也可以使用`GetByteCount`函数。但是,如果您正在流式传输内容然后存储,您需要在发送内容之前发送文件的长度,并在允许开始发送内容之前采取适当的操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接