在Xamarin Android中存储SQLite数据库的路径

时间:2015-11-24 17:28:31

标签: c# android sqlite xamarin

我正在尝试将本地SQLite数据库存储在设备的内部存储中。当我使用模拟器时,这个:

static string dbName = "totems.sqlite";
string dbPath = Path.Combine (Android.OS.Environment.ExternalStorageDirectory.ToString (), dbName);

工作得很好。但是当我尝试在我的Nexus 5上进行调试时,它没有用,因为它没有外部存储空间。我搜索了它存储的位置,因此它也可以在我的Nexus上运行。我把它改为:

static string dbName = "totems.sqlite";
string dbPath = Path.Combine ("/data/data/com.companyname.totem/databases/", dbName);

但是现在它在我的Nexus 5上不起作用,它在我的模拟器上不起作用。它说它无法找到路径。

我做错了什么?

提前致谢。

3 个答案:

答案 0 :(得分:3)

我知道这是一个老话题,但旧答案有一个错字。工作语法应为:

string path = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "DatabaseName.txt");

答案 1 :(得分:1)

我使用以下代码:

string path = Path.Combine(System.Enviroment.GetFolderPath(System.Enviroment.SpecialFolder.Personal), "data.txt");

我认为应该像你想要的那样写入内部存储

答案 2 :(得分:0)

来自docs.com

LocalApplicationData:用作公用目录 当前使用的特定于应用程序的数据的存储库, 非漫游用户。

Personal:用作以下目录的公共存储库的目录 文件。该成员等效于MyDocuments。

为此,我使用:

var db_directory = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.LocalApplicationData),"databases"))

var db_path = Path.Combine(db_directory,"data.db");

也来自此样本(XF)
docs.com xamarin tutorial

public static Database Database
        {
            get
            {
                if (database == null)
                {
                    database = new Database(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "people.db3"));
                }
                return database;
            }
        }