【问题标题】:Xamarin Forms access denied when writing to file with FileStream使用 FileStream 写入文件时 Xamarin Forms 访问被拒绝
【发布时间】:2018-02-13 11:12:58
【问题描述】:

在真正的 Android 设备 (Android 8.0 - API 26) 上运行应用程序时,我尝试将字符串附加到位于 .NET 共享项目中的文本文件,但出现此运行时错误:

System.UnauthorizedAccessException: Access to the path 
"/Namespace.Folder.FileName.txt" is denied.

导致错误的代码:

string filename= "Namespace.Folder.FileName.txt";
FileStream fs = null; fs = File.Open(filename, FileMode.Append);
StreamWriter sw = new StreamWriter(fs); sw.Write(text)

我在 Android 权限下检查了 ACCESS_COARSE_LOCATION 和 ACCESS_FINE_LOCATION,并且文本文件的构建操作设置为 Embedded Resource。 我试过使用 System.IO.File 并且工作正常,但是这样我不知道如何不覆盖文本文件

var documentsPath = 
Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var filePath = Path.Combine(documentsPath, filename); 
System.IO.File.WriteAllText(filePath, text);

我想我的问题是将文本存储在共享项目内的文本文件中而不覆盖它的最佳方法是什么?

【问题讨论】:

  • 我认为你在这里误解了一些事情。 “我同时检查了 ACCESS_COARSE_LOCATION 和 ACCESS_FINE_LOCATION”这些是用于访问用户 GPS 位置的,因此在这里对您没有帮助。您需要查找文件系统权限。
  • 我的错,WriteExternalStorage 是我的意思。

标签: xamarin.forms xamarin.android access-denied


【解决方案1】:

我发现了我的问题,我没有将根文件夹传递给作者和读者。 工作代码:

加载:

var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
        var filePath = Path.Combine(documentsPath, filename);
        using (var streamReader = new StreamReader(filePath))
        {
            string content = streamReader.ReadToEnd();
            return content;
        }

写:

var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
        var filePath = Path.Combine(documentsPath, filename);
        using (var streamWriter = new StreamWriter(filePath, true))
        {
            streamWriter.WriteLine(text);
        }

【讨论】:

    猜你喜欢
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2012-09-13
    • 2010-09-22
    相关资源
    最近更新 更多