やりたいこと・現状
xamarin.Androidで、外部ストレージ(例えば/storage/emulated/0/Documents/)に、ファイルをコピー(WindowsPCに接続した後コピー)したファイルに対して編集が出来ない
(PCからのコピー・読取りは可能)
アプリからファイルの出力(書き込み)を行いたい
権限を取得して書き込みを行う処理を作ってみたが、ファイルに書き込みされないのです(リードは出来ます)
Windows10でUSB接続して「PC\HUAWEI MediaPad M3 Lite 10\内部ストレージ\Documents」にあるファイルを見ても更新されていないと判断しました。
根本的に何か間違っているのでしょうか
単に環境の問題でしょうか
何か分かる方がいたら教えていただきたいです
C#
1using System; 2using System.IO; 3using System.Linq; 4using System.Text; 5using Android; 6using Android.App; 7using Android.Content.PM; 8using Android.OS; 9using Android.Runtime; 10using Android.Support.Design.Widget; 11using Android.Support.V4.App; 12using Android.Support.V4.Content; 13using Android.Support.V7.App; 14using Android.Views; 15using Android.Widget; 16 17namespace RcvWriteTest1 18{ 19 [Activity(Label = "@string/app_name", Theme = "@style/AppTheme.NoActionBar", MainLauncher = true)] 20 public class MainActivity : AppCompatActivity 21 { 22 protected override void OnCreate(Bundle savedInstanceState) 23 { 24 base.OnCreate(savedInstanceState); 25 Xamarin.Essentials.Platform.Init(this, savedInstanceState); 26 SetContentView(Resource.Layout.activity_main); 27 28 Android.Support.V7.Widget.Toolbar toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar); 29 SetSupportActionBar(toolbar); 30 31 Button btnEnd = (Button)FindViewById(Resource.Id.button2); 32 btnEnd.Click += BtnEnd_Click; 33 Button btnWrite = (Button)FindViewById(Resource.Id.button1); 34 btnWrite.Click += BtnWrite_Click; 35 } 36 37 public override bool OnCreateOptionsMenu(IMenu menu) 38 { 39 MenuInflater.Inflate(Resource.Menu.menu_main, menu); 40 return true; 41 } 42 43 public override bool OnOptionsItemSelected(IMenuItem item) 44 { 45 int id = item.ItemId; 46 if (id == Resource.Id.action_settings) 47 { 48 return true; 49 } 50 51 return base.OnOptionsItemSelected(item); 52 } 53 54 private void FabOnClick(object sender, EventArgs eventArgs) 55 { 56 View view = (View) sender; 57 Snackbar.Make(view, "Replace with your own action", Snackbar.LengthLong) 58 .SetAction("Action", (Android.Views.View.IOnClickListener)null).Show(); 59 } 60 61 private void BtnEnd_Click(object sender, EventArgs e) 62 { 63 this.FinishAndRemoveTask(); // アプリケーションの終了 64 // アプリの強制終了させる 65 System.Diagnostics.Process.GetCurrentProcess().CloseMainWindow(); 66 } 67 private void BtnWrite_Click(object sender, EventArgs e) 68 { 69 // 書き込み権限確認 70 var permissioncheckW = ContextCompat.CheckSelfPermission(this, Manifest.Permission.WriteExternalStorage); 71 // 書き込み権限がない場合はリクエストする 72 if(permissioncheckW == Android.Content.PM.Permission.Denied) 73 { 74 ActivityCompat.RequestPermissions(this, new [] 75 { 76 Manifest.Permission.WriteExternalStorage 77 }, 0); 78 } 79 string strbase = Android.OS.Environment.ExternalStorageDirectory + "/Documents/"; 80 string path = Path.Combine(strbase, "TEST.txt"); 81 string path2 = Path.Combine(strbase, "TEST.CSV"); 82 83 //FileInfo file = new FileInfo(path); 84 var Lines = System.IO.File.ReadAllLines(path2, Encoding.GetEncoding("shift-jis")); 85 86 // ***** ここで書き込みを行ってみるが、TEST.txtにはなにも書き込まれていない... ***** 87 try 88 { 89 System.IO.File.WriteAllText(path, "TEST\n"); 90 } 91 catch(Exception ex) 92 { 93 Toast.MakeText(this, ex.Message, ToastLength.Short).Show(); 94 } 95 96 } 97 public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults) 98 { 99 Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults); 100 // 要求して権限がすべて許可された場合にダイアログを表示 101 if (grantResults.Cast<Permission>().All(x => x == Permission.Granted)) 102 { 103 new Android.App.AlertDialog.Builder(this) 104 .SetTitle("Runtime Permission") 105 .SetMessage("All Granted") 106 .SetPositiveButton("OK", (_, __) => { }) 107 .Show(); 108 } 109 base.OnRequestPermissionsResult(requestCode, permissions, grantResults); 110 } 111 } 112} 113
上記の処理でファイル書込の処理を試したところ、特にエラーが発生していないようなのに(catch側に来ないのに)書き込みが出来ていない
(別フォルダでも良いので自分で追加したファイルの入出力さえ出来れば良いのですが。。。)
試したこと
・ファイル読込(System.IO.File.ReadLines) 問題なし
・ファイル書込(System.IO.File.WriteAllText) Windowから確認すると書き込みできない
・書き込み後に同じファイルを読み込むと、書いた内容が読み込めた
・実は書き込めているが、Android上とWindows10上では認識が違う?
環境
android : Android7.0(HUAWEI MediaPad M3 Lite 10)
PC : Windows10 , Visualstudio2019(xamarin)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/19 01:34