2017-06-20 25 views
0

私は、ファイルを選択してそのファイルのパスを取得した後に処理するためのアプリケーションを開発しています。このようなパスを取得するコードを書いています。Android - ファイルを選択して絶対パスを取得

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); 
       } 
      } 
     } 

し、その結果、このようなパターンである:結果のためのアクティビティで

private void OpenFile() 
     { 
      Intent i = new Intent(Intent.ActionGetContent); 
      i.SetType("application/zip"); 
      StartActivityForResult(i,0); 
     } 

Iパスを抽出しています次のように

content://com.android.externalstorage.documents/document/xxxx-83BB%3xxx%2Fxxx.zip 

しかし、このパスからアクセスしようとしましたDirectoryNotFound例外 このパスをストリームとして開く方法を解決できません。

+0

したがって、ファイルディレクトリが見つかりません。ディレクトリが存在するかどうかを確認してから、読み込みます。 – RameshJaga

+0

はい、存在します!問題は、ファイルを選択したときにのみパスを受け取るため、Uriに関連するものです。 – Technacron

+1

これをチェックしてくださいhttps://stackoverflow.com/a/20559175/2556660 – RameshJaga

答えて

0

幸いにも、私はインテントのデータをよく見て答えを見つけました。

protected override void OnActivityResult(int requestCode, Result resultCode, Intent intent) 
    { 
     base.OnActivityResult(requestCode, resultCode, intent); 
     if (requestCode == 0) 
     { 
      if (resultCode == Result.Ok) 
      { 
       string uri = data.DataString; 
       //intent variable has a Field named Data which is the complete URI for the file. 
       Android.Net.Uri uris = Android.Net.Uri.FromParts(intent.Data.Scheme, intent.Data.SchemeSpecificPart, intent.Data.Fragment); 
       System.IO.Stream input = ContentResolver.OpenInputStream(intent.Data); 
       //related tasks 
      } 
     } 
    } 

説明: 選択したファイルの結果は、それが基本的にURIオブジェクト 私は得るためにそれを使用する傾向にあるウリの発動で、テントオブジェクトのデータという名前のフィールドを持っていますContentResolverからの入力ストリーム。

関連する問題