【问题标题】:Can't write data to a file. All System.IO methods doesn't work. Xamarin.Forms无法将数据写入文件。所有 System.IO 方法都不起作用。 Xamarin.Forms
【发布时间】:2020-05-29 19:07:01
【问题描述】:

我正在使用Xamarin.Forms 制作一个简单的iOS 应用程序。我使用SQLiteMono.Data.Sqlite library。我需要通过INSERT 命令在数据库中插入数据并将数据写入文本文件。我已存储到 iOS 项目的 Resources 目录中的所有文件(文本文件、.db 文件、图像)。 当我尝试将数据写入文本文件或将INSERT 写入我的数据库时,程序什么也不做。未插入/写入数据。并且没有抛出异常。例如:

public partial class SomePage : ContentPage
{
    public SomePage()
    {
        InitializeComponent();

        using (StreamWriter sw = new StreamWriter("some_file.txt"))
        {
            sw.WriteLine("some data");
        }
    }
}

数据未写入,文件仍为空。

我使用 macOS Catalina 10.15.4 和 Visual Studio for Mac 8.6.1

我已经搜索过这个问题,但没有什么可以解决这个问题。等待你的答案!谢谢!

【问题讨论】:

  • 为了隔离问题,我建议添加一些代码来读取文件。然后手动编辑文件,看看你的程序是否接受了他的更改。这样您就可以判断程序是否在您期望的相同位置(路径)。
  • 您的应用程序包已签名,因此在运行时是只读的。请阅读有关文件处理的文档 - docs.microsoft.com/en-us/xamarin/xamarin-forms/data-cloud/data/…
  • @Jason 所以我需要使用文件作为嵌入式资源?
  • @JohnWu 是的,我已经通过文件资源管理器更改了文件中的数据并且程序可以正确读取它。
  • 如果你想写入一个文件(或数据库),它必须放在一个可写的文件夹中 - 请参阅文档。如果您在应用中包含现有数据库,则需要在应用启动时将其从 Resources 或 Assets 复制到可写文件夹。

标签: c# xamarin.forms system.io.file


【解决方案1】:

感谢@Jason,他向我展示了正确的方法 :) 所以解决方案是在应用启动时将 Resources 中附加的文件复制到 writeable 文件夹中,例如iOS 应用程序沙箱中的 Documents 文件夹。所以我们可以使用 Environment 类来访问这个文件夹。

public partial class SomePage : ContentPage
{
    public SomePage()
    {
        string filepath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "some_file.txt");
        File.Copy("some_file.txt", filepath); // From Resource folder to Documents
        File.WriteAllText(filepath, "Some text");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多