我正在开发一个应用程序,它允许用户选择一个文件,并在获取它的路径后对其进行处理,我已经编写了一个代码,让我得到这样的路径
private void OpenFile()
{
Intent i = new Intent(Intent.ActionGetContent);
i.SetType("application/zip");
StartActivityForResult(i,0);
}
在结果活动中,我按如下方式提取路径:
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
if (requestCode == 0)
{
if (resultCode == Result.Ok)
{
string uri = data.DataString;
System.Uri myUri = new System.Uri(uri, System.UriKind.Absolute);
Android.Net.Uri uris = Android.Net.Uri.FromParts(data.Scheme, myUri.LocalPath, myUri.Fragment);
// string a= myUri.LocalPath;
System.IO.Stream input= ContentResolver.OpenInputStream(uris);
string uri = data.DataString;
ZipLogic.Unzip(uri);
}
}
}
结果是这样的模式:
content://com.android.externalstorage.documents/document/xxxx-83BB%3xxx%2Fxxx.zip
但是当我尝试访问时,此路径返回 DirectoryNotFound Exception 我无法解决如何以Stream形式打开此路径。
答案 0 :(得分:0)
幸运的是,我通过仔细观察Intent数据找到了答案。
json``response as an
说明: 所选文件结果在 Intent 对象中有一个名为 Data 的字段,基本上是Uri Invoker,它往往是 URI 对象 我用它来从ContentResolver获取输入流。