我有一个场景,我必须禁止用户仅在目录大小达到指定限制时保存文件。
将从流中创建文件。
如何在将流保存到磁盘之前获取文件大小(近似值)?
(注意:用户不会提供任何文件或文件路径。我会以byte []或字符串的形式获取数据。)
答案 0 :(得分:3)
如果你有一个Stream
对象,你可以使用它的Length
属性 - 它给出了字节长度 - 但并非所有的流都支持它(例如,内存和文件流都有,但是网络溪流一般不会。)
如果从字节数组(byte[]
)开始,请使用其Length
属性来获取字节数。
如果您使用的是字符串,则取决于编码。例如,对于UTF8,您可以使用
int byteCount = System.Text.Encoding.UTF8.GetByteCount(str);
答案 1 :(得分:1)
如果你正在使用MemoryStream,你可以做这样的事情
byte[] fileData = stream.ToArray();
var fileSize = fileData.Length;
答案 2 :(得分:0)
根据Eli Arbel的答案,您可以使用Length
属性,如果是string
GetByteCount
功能,但是如果您要传输内容然后存储您需要在发送内容之前发送文件长度,并在允许开始发送内容之前采取适当的措施。