【问题标题】:Where is the app Personal Folder path应用程序个人文件夹路径在哪里
【发布时间】:2018-01-10 15:41:15
【问题描述】:

我正在尝试创建一个 sqlLite 数据库。此代码有效并创建数据库并允许我进行插入和选择。

string dbPath = Path.Combine(
System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), 
                                 "ormdemo.db3");

//dbPath = "/storage/emulated/0/DCIM/ormdemo.db3";

var db = new SQLiteConnection(dbPath);
db.CreateTable<Stock>();

现在返回的 dbPath 是:

"/data/user/0/MyFirstGPSApp.MyFirstGPSApp/files/ormdemo.db3"

但是当我使用 sqlLite 管理器尝试打开数据库时,我找不到文件夹 /data/user

那个文件夹/data/user在哪里?

sqlLite 有打开“APP”数据库的选项,但是当尝试选择MyFirstGPSApp 时说需要一个根设备。

sqlLite 的起始文件夹是/storage/emulated/0,并有一个子文件夹/DCIM

所以我尝试使用我可以看到的文件夹......比如/storage/emulated/0/DCIM/ormdemo.db3,但随后new SQLiteConnection(dbPath) 给了我这个错误。

SQLite.SQLiteException:无法打开数据库文件:/storage/emulated/0/DCIM/ormdemo.db3 (CannotOpen)

/DCIM文件夹中写入是否需要特殊权限?

【问题讨论】:

    标签: android visual-studio sqlite permissions xamarin.android


    【解决方案1】:

    好的,您的帖子中有三个问题。在回答你的问题之前,我认为一些图片是必要的。

    P1:

    P2:

    就像@Yogesh Paliyal 所说,您需要File Explorer 才能看到它。如果您也想查看它并且不想根您的设备,请关注我:Visual Studio-&gt;Tools-&gt;Android-&gt;Android Device Monitor-&gt;select one simulator from Devices column-&gt;File Explorer。我建议你创建一个Api低于21的模拟器,因为更高的也看不到文件。我正在使用 19 来查看文件。

    我认为你应该先阅读this


    好的,让我们看看你的问题:

    应用的个人文件夹路径在哪里?

    在android中,有两个文件夹:个人/内部文件夹和公共/外部文件夹,here is official document

    个人/内部文件夹路径:

    公共/外部文件夹路径:

    那个文件夹 /data/user 在哪里?

    从P1可以看到-&gt;/data/data//data/user/0后面,所以文件夹/data/user/0/MyFirstGPSApp.MyFirstGPSApp/files/ormdemo.db3实际上是/data/data/MyFirstGPSApp.MyFirstGPSApp/files/ormdemo.db3

    在 /DCIM 文件夹中写入是否需要特殊权限?

    个人/内部文件夹不需要权限,公共/外部文件夹需要权限。

    /storage/sdcard 文件夹中,只有Android 文件夹是个人/内部文件夹,因此您需要权限:&lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt;&lt;uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&gt; 或两者。

    【讨论】:

    • 所以当我在手机中打开 sqlLite 管理器并告诉我 /storage/emulated/0/DCIM/ 这是什么意思?为什么我不能在那里创建数据库?
    • Have you read this?,你需要权限。
    • 我需要什么权限?我读了链接。我学到了一些东西。如果我使用 sqlLite 管理器,我可以在/storage/emulated/0/DCIM 中创建一个新数据库如果我将手机连接到我的电脑,我可以访问相同的/DCIM 文件夹,但在//Storage Card/DCIM 下而不是emulatestorage 但我看不到即使选择显示隐藏文件,我也只是创建的 sqlLite db。我知道是一样的,因为在子文件夹/DCIM/Camera 可以看到我的图片。
    • android.permission.WRITE_EXTERNAL_STORAGE,你的项目中添加这个权限了吗?
    • 好的,解决了在/DCIM 中创建数据库的问题。一个后续问题:外部存储是否仅指 microSD?就我而言,我有 32 GB 的内部存储器和 32 GB 的 microSD。但在我的 moto-g 中,它们作为一个驱动器连接在一起。
    【解决方案2】:

    没有 root 权限,您无法直接从移动设备上查看。 尝试使用 Android Studio 的文件资源管理器功能。

    【讨论】:

    • 我正在使用 Visual Studio。不确定是否有文件资源管理器工具。但是 DCIM 文件夹呢?
    猜你喜欢
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多