Como obter corretamente o tamanho do arquivo android.net.Uri?
Eu tenho um android.net.Uri apontando para um arquivo do qual preciso determinar o tamanho do arquivo. Atualmente, isso é feito usando uma consulta no contentResolver (estou usando o Xamarin, então é 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();
Isso funciona na maioria das vezes, mas para alguns arquivos, o valor parece ser um pouco maior que o tamanho correto (estou usando o Total Commander como referência).
Deve haver uma maneira melhor de fazer isso, eu realmente preciso das informações de tamanho exato e, como os arquivos são muito grandes, não consigo lê-los primeiro na memória. E por que minha abordagem produz resultados incorretos?
Agradeço antecipadamente por sua ajuda.