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

我有一个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作为参考)。

尺寸1size2个

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

在此先感谢您的帮助。

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

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