【发布时间】:2014-02-10 13:49:24
【问题描述】:
我有一个场景,只有当目录的大小达到指定的限制时,我才必须禁止用户保存文件。
文件将从流中创建。
如何在将流保存到磁盘之前获取文件大小(近似值)?
(注意:用户不会提供任何文件或文件路径。我会以字节[]或字符串的形式获取数据。)
【问题讨论】:
-
如果你有一个字节[] 或字符串,大小将是
.Length属性的值,对吧?我错过了什么吗?
我有一个场景,只有当目录的大小达到指定的限制时,我才必须禁止用户保存文件。
文件将从流中创建。
如何在将流保存到磁盘之前获取文件大小(近似值)?
(注意:用户不会提供任何文件或文件路径。我会以字节[]或字符串的形式获取数据。)
【问题讨论】:
.Length 属性的值,对吧?我错过了什么吗?
如果你有一个Stream 对象,你可以使用它的Length 属性——它以字节为单位给出长度——但不是所有的流都支持它(例如,内存和文件流支持,但网络流通常不支持' t)。
如果您从字节数组 (byte[]) 开始,请使用其Length 属性来获取字节数。
如果您使用的是字符串,则取决于编码。例如,对于 UTF8,您可以使用
int byteCount = System.Text.Encoding.UTF8.GetByteCount(str);
【讨论】:
如果你使用的是 MemoryStream,你可以这样做
byte[] fileData = stream.ToArray();
var fileSize = fileData.Length;
【讨论】:
Stream.Length属性即可。
根据Eli Arbel 的回答,您可以使用Length 属性,如果是string GetByteCount 函数,但如果您正在流式传输内容然后存储您需要在发送之前发送文件的长度内容并在允许开始发送内容之前采取适当的措施。
【讨论】: