如何正确获取android.net.Uri的文件大小?

时间:2014-02-19 13:44:04

标签: c# java android xamarin

我有一个android.net.Uri指向我需要确定文件大小的文件。目前这是通过对contentResolver的查询来完成的(我使用的是Xamarin,所以它是C#):

var cursor = contentResolver.Query(uri, new string[] {
    Android.Provider.OpenableColumns.Size,
    Android.Provider.OpenableColumns.DisplayName 
}, null, null, null);
cursor.MoveToFirst();
size = cursor.GetLong(0);
fileName = cursor.GetString(1);
cursor.Close();

大部分时间都可以使用,但对于某些文件,该值似乎比正确的文件大小略大(我使用Total Commander作为参考)。

size1 size2

必须有更好的方法来做到这一点,我真的需要确切的大小信息,因为文件很大,所以不能先将它们读入内存。为什么我的方法会产生不正确的结果?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

虽然我没有找到查询返回错误结果的原因,但我发现另一种获取文件大小的方法似乎有效:

using (var fd = contentResolver.OpenFileDescriptor(uri, "r"))
    size = fd.StatSize;