Xamarin.Android: 往文件里写点东西,之后可以用电脑打开

Xamarin.Android: Write something into a file and be able to open it with the computer afterwards

我正在尝试为我的 Xamarin 编写某种外部配置文件。Android-application。只是 .txt,这只需要包含几个字符串,所以不需要火箭科学^^

例如(示例 Goal/Hopefully 文本文件的最终内容:)

[TestSection]
test=12345

我通过教程和以下代码进行了尝试:

//This code snippet is one example of writing a string to a UTF-8 text file and into the internal storage directory of an application:
public void SaveSomethingIntoExternalTextFile(string toWrite)
{
    var backingFile = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "config.txt");
    using (var writer = System.IO.File.CreateText(backingFile))
    {
        writer.WriteLine(toWrite);
    }
}

但遗憾的是这没有效果。因为我唯一的 app-specific 路径是

Phone\Android\data\com.<company_name>.<application_name>\files

我在 运行 上面的代码之后找不到任何文件。即使我在给定路径中使用计算机创建一个新文件,将其命名为写入 (config.txt) 并再次 运行 给定代码,仍然没有任何反应(因此作为参数传递给不幸的是,该方法没有像尝试的那样写入该文件。

为了完整起见,我的测试应用程序非常简单:

protected override void OnCreate(Bundle bundle)
{
    base.OnCreate(bundle);
    SaveSomethingIntoExternalTextFile("[TestSection]");
    SaveSomethingIntoExternalTextFile("test="+12345);
}

有人可以帮忙吗?我做错了什么?

对于每一个答案都会非常高兴,在此先感谢

此致

P.S.: 如果我打开电脑生成的文本文件,即使在文件目录中显示正确,文件的标题是config[1].txt,再次打开config[2 .txt 等等。还是 matter/has 与我上面的尝试无关?

好的,通过调试,我发现他确实写了这个值,至少我可以用下面的函数检索它(我在我的教程中将值的类型更改为整数(https://docs.microsoft.com/de-de/xamarin/android/platform/files/index#reading-or-writing-to-files-on-internal-storage ) 它也是整数):

    //This code snippet provides one way to read an int value that was stored in a text file:
    public int ReadSomethingFromTextFile()
    {
        var backingFile = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "config.txt");

        if (backingFile == null || !System.IO.File.Exists(backingFile))
        {
            return 0;
        }

        int count = 0;
        using (var reader = new StreamReader(backingFile, true))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                if (int.TryParse(line, out var newcount))
                {
                    count = newcount;
                }
            }
        }
        return count;
    }

然而,我找不到写入的文件。路径 System.Environment.SpecialFolder.Personal 正确吗?或者这是否指向根目录,我总是在某种用户文件夹中寻找?

因为当使用调试器查看里面的内容时 backingFile,它是 /data/data/com.<company_name>.<application_name>/files/config.txt, 正如上面 post 中所写,我可以通过资源管理器访问的唯一 app-specific 路径是 Phone/Android/data/com.<company_name>.<application_name>/files.

我读到一些关于必须 root 我的 phone 才能访问此路径的内容?没有意义吧? 是不是有某种共享文件夹(/路径),不仅可以通过 application/operating 系统访问,还可以从外部访问?

如果使用System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal),路径就像

/data/data/App3.App3/files/config.txt

表示你保存在internal storage, you could not see it without root permission,if you want to see it, you can save it in external storage.

 public void SaveSomethingIntoExternalTextFile(string toWrite)
    {

        string path = Android.App.Application.Context.GetExternalFilesDir(null).ToString();
        string filepath = Path.Combine(path, "text.txt");
        using (var writer = System.IO.File.CreateText(filepath))
        {
            writer.WriteLine(toWrite);
        }
    }

路径如:

/storage/emulated/0/Android/data/App3.App3/files/text.txt