Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Android Xamarin从Android.Net.Uri获取绝对路径_C#_Xamarin_Xamarin.android - Fatal编程技术网

C# Android Xamarin从Android.Net.Uri获取绝对路径

C# Android Xamarin从Android.Net.Uri获取绝对路径,c#,xamarin,xamarin.android,C#,Xamarin,Xamarin.android,我有一个Android和Xamarin应用程序,它需要用户从内部存储器中获取一个文件,然后读取该文件 我使用的文件选择器将文件作为Android.Net.Uri对象返回。以下是该对象是如何出现的: 然后使用System.IO.file.ReadAllBytes(文件名)读取文件。问题是此方法无法找到具有此路径的文件 我尝试了Path.GetFullPath(uri.Path),但它返回的值与我传入的值相同 如何获取此类Uri对象的文件绝对路径 此外,该文件可以位于任何文件夹中,而不仅仅是示例中

我有一个Android和Xamarin应用程序,它需要用户从内部存储器中获取一个文件,然后读取该文件

我使用的文件选择器将文件作为
Android.Net.Uri
对象返回。以下是该对象是如何出现的:

然后使用
System.IO.file.ReadAllBytes(文件名)
读取文件。问题是此方法无法找到具有此路径的文件

我尝试了
Path.GetFullPath(uri.Path)
,但它返回的值与我传入的值相同

如何获取此类
Uri
对象的文件绝对路径


此外,该文件可以位于任何文件夹中,而不仅仅是示例中的
下载
文件夹中。

我也遇到了同样的问题,最后在这里找到了一个很好的解决方法:

对我来说,唯一棘手的部分是: a) 查找ContentResolver,因为我不在活动中,而是在片段中:

this.View.Context.ContentResolver
b) 查找ManagedQuery对象,该对象也是活动的属性

this.Activity.ManagedQuery
c) 提供正确的选择,因为我有一张来自MediaStore的图像:

string selection = Android.Provider.MediaStore.Images.Media.InterfaceConsts.Id + " =? ";
我希望这仍然对你有帮助,尽管那是两个月前的事了

private string GetPathToImage(Android.Net.Uri uri) {
    string doc_id = "";
    using (var c1 = this.View.Context.ContentResolver.Query(uri, null, null, null, null)) {
        c1.MoveToFirst();
        String document_id = c1.GetString(0);
        doc_id = document_id.Substring(document_id.LastIndexOf(":") + 1);
    }

    string path = null;

    // The projection contains the columns we want to return in our query.
    string selection = Android.Provider.MediaStore.Images.Media.InterfaceConsts.Id + " =? ";
    using (var cursor = this.Activity.ManagedQuery(Android.Provider.MediaStore.Images.Media.ExternalContentUri, null, selection, new string[] { doc_id }, null)) {
        if (cursor == null) return path;
        var columnIndex = cursor.GetColumnIndexOrThrow(Android.Provider.MediaStore.Images.Media.InterfaceConsts.Data);
        cursor.MoveToFirst();
        path = cursor.GetString(columnIndex);
    }
    return path;
}

你能提供你的项目的文件选择器代码吗?我想应该是:
1。文件f=新文件(Uri);var absp=绝对路径
它说
ManagedQuery
行已被弃用,您是否有新的查询方式?看看这里,我认为this.Activity.ContentResolver.Query应该是合适的替代品-