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
我正在尝试为我的 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