Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android应用程序沙盒存储下访问SQLite数据库?_Android_Sqlite_Xamarin_Xamarin.forms_Xamarin.android - Fatal编程技术网

如何在Android应用程序沙盒存储下访问SQLite数据库?

如何在Android应用程序沙盒存储下访问SQLite数据库?,android,sqlite,xamarin,xamarin.forms,xamarin.android,Android,Sqlite,Xamarin,Xamarin.forms,Xamarin.android,我有一个本机应用程序,它在com.companyname.appname/databases/MyDatabase.db中生成一个SQLite数据库文件。这是在Android的内部应用程序存储中 我需要将此应用程序迁移到Xamarin.Forms中,但我需要访问该数据库以将其移动到另一个目录或直接读取数据库 问题是使用System.Environment.SpecialFolder.Personal/System.Environment.SpecialFolder.MyDocuments,这是中

我有一个本机应用程序,它在com.companyname.appname/databases/MyDatabase.db中生成一个SQLite数据库文件。这是在Android的内部应用程序存储中

我需要将此应用程序迁移到Xamarin.Forms中,但我需要访问该数据库以将其移动到另一个目录或直接读取数据库

问题是使用
System.Environment.SpecialFolder.Personal
/
System.Environment.SpecialFolder.MyDocuments
,这是中所述的可能的最高位置,只会导致com.companyname.appname/files/位置。我需要更高一级才能访问数据库文件夹。这可能吗

注意:我已经尝试对路径进行硬编码,并且添加了“./”,它不起作用并抛出错误

问题在于,使用System.Environment.SpecialFolder.Personal/System.Environment.SpecialFolder.MyDocuments(此处文档中所述的最高可能位置)只会导致com.companyname.appname/files/location

用作文档公共存储库的
个人目录
相当于
MyDocuments
。有关更多信息,您可以查看MS文档

使用个人文件夹读取数据库的简单方法

string databaseFolder = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
                string databasePath = Path.Combine(docFolder, "TodoSQLite2.db3");
将退出的数据库复制到资产文件夹

并将构建操作设置为AndroidAsset

更新:

如果要在运行时将数据库复制到另一个文件夹,可以尝试下面的代码。例如,我使用本地文件夹

// Check if it exists at that path
if (File.Exists(filePath))
{
   // Copy the file to the app's local folder, you could change the path where you want to copy.
   string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
   string destinationPath = Path.Combine(folderPath, "myData.db");
   File.Copy(filePath, destinationPath);
}
问题在于,使用System.Environment.SpecialFolder.Personal/System.Environment.SpecialFolder.MyDocuments(此处文档中所述的最高可能位置)只会导致com.companyname.appname/files/location

用作文档公共存储库的
个人目录
相当于
MyDocuments
。有关更多信息,您可以查看MS文档

使用个人文件夹读取数据库的简单方法

string databaseFolder = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
                string databasePath = Path.Combine(docFolder, "TodoSQLite2.db3");
将退出的数据库复制到资产文件夹

并将构建操作设置为AndroidAsset

更新:

如果要在运行时将数据库复制到另一个文件夹,可以尝试下面的代码。例如,我使用本地文件夹

// Check if it exists at that path
if (File.Exists(filePath))
{
   // Copy the file to the app's local folder, you could change the path where you want to copy.
   string folderPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
   string destinationPath = Path.Combine(folderPath, "myData.db");
   File.Copy(filePath, destinationPath);
}

那么如何通过编程方式获取“System.Environment.SpecialFolder.Personal”上方的文件夹呢?在Xamarin.Android中,我只获取com.companyname.appname/files/location。@iamlawersv“获取'System.Environment.SpecialFolder.Personal'上方的文件夹”是什么意思?您的意思是要设置用于以编程方式保存数据库的文件夹吗?如果是,您可以尝试使用代码
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),“TodoSQLite.db3”)
来设置路径。我的意思是通过编程导航到System.Environment.SpecialFolder.Personal代码返回的文件夹上方的文件夹。我需要在运行时将数据库复制到另一个文件夹。@iamv我已经更新了回复,请检查更新的代码。这仍然无法解决最初的问题,即我无法访问com.companyname.appname/databases/MyDatabase.db位置,因为Environment.SpecialFolder.Personal仅访问com.companyname.appname/files位置。如果我可以从该位置访问一级文件夹并导航到databases文件夹,那么复制就很简单了。那么如何通过编程方式在“System.Environment.SpecialFolder.Personal”上方获取文件夹?在Xamarin.Android中,我只获取com.companyname.appname/files/location。@iamlawersv“获取'System.Environment.SpecialFolder.Personal'上方的文件夹”是什么意思?您的意思是要设置用于以编程方式保存数据库的文件夹吗?如果是,您可以尝试使用代码
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),“TodoSQLite.db3”)
来设置路径。我的意思是通过编程导航到System.Environment.SpecialFolder.Personal代码返回的文件夹上方的文件夹。我需要在运行时将数据库复制到另一个文件夹。@iamv我已经更新了回复,请检查更新的代码。这仍然无法解决最初的问题,即我无法访问com.companyname.appname/databases/MyDatabase.db位置,因为Environment.SpecialFolder.Personal仅访问com.companyname.appname/files位置。如果我可以从该位置访问一级以上的文件夹并导航到databases文件夹,那么复制起来就很简单了。