【问题标题】:Xamarin android save text fileXamarin android保存文本文件
【发布时间】:2016-08-01 09:32:29
【问题描述】:

我正在使用 Xamarin.Android,我想将 .txt 文件保存到 SD 卡。这是我正在使用的代码:

  private void SavetoSd()
  {
       var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.Path;
       var filePath = System.IO.Path.Combine(sdCardPath, "iootext.txt");
       if (!System.IO.File.Exists(filePath))
       {
           using(System.IO.StreamWriter write = new System.IO.StreamWriter(filePath,true))
           {
               write.Write(etSipServer.ToString());
           }
       }    
  }

但是,我收到以下错误:

System.UnauthorizedAccessException:访问路径 “/mnt/sdcard/iootext.txt”被拒绝。

我在清单中添加了以下内容:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我该如何解决这个错误?

【问题讨论】:

  • 你试过什么?可能该目录不可写(未设置可写位)或整个 SD 安装为只读。
  • 如果您之后添加了权限,请尝试在您的设备上卸载该应用程序,清理项目并重建它。有时它们会不同步,因为构建过程会尝试优化:)
  • 我没有安装但没有帮助:/
  • 您在哪个版本的 Android 上运行?如果您在 Marshmallow 或更高版本上运行,则需要使用 RequestPermission 请求用户许可。 blog.xamarin.com/…
  • var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.Path; 的方法似乎被贬低了。我没找到,所以我问了questionMicrosoft Documentation 表明使用 .Net 方法可能更容易。如果我错了,请纠正我。

标签: c# android xamarin xamarin.android


【解决方案1】:

如果您使用的是 Android 6.0+,则需要执行运行时检查权限。可以这样做:

if ((CheckSelfPermission(Permission.ReadExternalStorage) == (int)Permission.Granted) && 
    (CheckSelfPermission(Permission.WriteExternalStorage) == (int)Permission.Granted))

更多信息可以在安卓文档here中找到。

【讨论】:

    【解决方案2】:

    如果文件不存在首先创建,然后获取绝对路径并将数据写入其中。

         Java.IO.File sdCard = Android.OS.Environment.ExternalStorageDirectory;
         Java.IO.File dir = new Java.IO.File (sdCard.AbsolutePath + "/MyFolder");
         dir.Mkdirs ();
         Java.IO.File file = new Java.IO.File (dir,"iootext.txt");
            if (!file.Exists ()) {
                file.CreateNewFile ();
                file.Mkdir ();
                FileWriter writer = new FileWriter (file);
                // Writes the content to the file
                writer.Write (jsonData);
                writer.Flush ();
                writer.Close ();
            }
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,花了几个小时后,我发现如果你在高于 23 的 sdk 上运行,高于 6 的 android 版本,你应该实现对用户的访问请求。请在this链接上找到更多信息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-18
        • 2019-04-09
        • 2016-11-06
        • 1970-01-01
        • 1970-01-01
        • 2021-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多