【问题标题】:Where is the location of file created by Cordova File Plugin?Cordova File Plugin 创建的文件的位置在哪里?
【发布时间】:2016-04-14 03:28:37
【问题描述】:

我使用Cordova File Plugin 在移动设备上创建文件。下面是创建文件的代码:

window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function (dir) {
   alert(cordova.file.dataDirectory);
   dir.getFile("log.txt", { create: true }, function (file) {
          alert("got the file: "+ file.name + ', ' + file.fullPath);
   });
});

当我在我的安卓手机上部署应用程序时,文件会创建成功,但我在我的设备上找不到创建的文件。

虽然cordova.file.dataDirectory 指向我设备上的file:///data/data/io.cordova.myappId/files/ 路径,io.cordova.myappId 文件夹不存在于data>data 路径中,但存在于Android>data 路径中。顺便说一句,我检查了storage>Android>data>io.Cordova.myappId>filesstorage>data>data 并且文件不存在。

这是因为:

创建的文件位于另一个地方,那么我在哪里可以找到呢?

因为它是私有的,而我的文件管理员无权访问它,所以我该如何更改权限设置以拥有公共文件?

【问题讨论】:

    标签: android cordova phonegap-plugins cordova-plugins


    【解决方案1】:

    为什么在我的设备上找不到文件?

    文件已成功创建,但我在我的设备上找不到该文件,因为我指示创建文件的 dataDirectory 路径是私有路径,我的设备文件管理器无权访问它(基本在this table)。实际上dataDirectory 是一个Internal Storage 选项。

    内部存储:将私有数据存储在设备内存中。

    您可以将文件直接保存在设备的内部存储中。经过 默认情况下,保存到内部存储的文件对您的私有 应用程序和其他应用程序无法访问它们(也不能 用户)。当用户卸载您的应用程序时,这些文件是 已删除。(reference)

    如何创建公共文件?

    因此,要在我的设备上创建一个可以使用文件管理器访问的文件,我必须使用以下公共路径选项之一:externalDataDirectory。之前,我认为它是用于将文件存储在我手机上没有的外部 SD 卡上,所以我没有测试它。但是今天对其进行测试,它会在我的内部设备存储空间中的Android/data/<app-id>/files 路径中创建该文件,该路径是公共的,我可以使用设备文件管理器访问它。

    实际上,internalexternal 这两个词对我来说是一种误导,而 external storage 可以是可移动存储介质(例如 SD 卡)或内部(不可移动)存储 (reference)。

    【讨论】:

    • 嗨@A.M,我面临着类似的问题。虽然我使用 externalDataDirectory,但我无法在设备中找到我的文件。函数 getFile 返回成功。我还想念别的吗。请帮忙。
    • @Aish123 我没有你的代码,所以我不能告诉你是否遗漏了什么。只能告诉你这会起作用:window.resolveLocalFileSystemURL(cordova.file.externalDataDirectory, function (dirEntry) { dirEntry.getDirectory(dirName, { create: true }, function (dirEntry) { dirEntry.getFile(fileName, { create: true }, function (fileEntry) {alert("创建文件: " + fileEntry.name + ', ' + fileEntry.fullPath);}); }, errorHandler) }, errorHandler);
    • @Aish123 如果您的设备是 android,还检查其他基于 this table 的 r/w 路径,或者根据您的设备操作系统检查其他表。
    • 感谢@A.M. 的回复我使用了 externalRootDirectory ,但是该文件是在内部存储中创建的,尽管回调将外部内存显示为路径。我想要的只是创建一个用于检查日志的文件,我得到了它。再次感谢您的帮助:)
    • @A.M:谢谢你。昨天当我将 phonegap 版本从 5.x.x 更新到 6.3.0 时,我遇到了这个问题。在这些版本之间的某个地方,必须更改行为,因为在 5.x.x 版本中,我使用dataDirectory 收到了来自设备存储的路径。
    【解决方案2】:

    在 Cordova 中读取/连接文件很痛苦。我编写了一个使用 Promise 的脚本来简化此操作。

    cordova-file-storage.js 添加到您的项目中,然后执行以下操作:

    // the object you want to save
    var objectToSave = { firstName: 'John', lastName: 'Doherty' };
    
    // the filename and extension you want to use
    var filename = 'whatever.txt';
    
    // the data to write (convert JSON object to a string)
    var data = JSON.stringify(objectToSave);
    
    // call write with params, .then executes with the filePath once complete
    fileStorage.write(filename, data).then(function(filePath) {
         console.log(filePath);
    })
    .catch(function(err) {
         // this executes if something went wrong
         console.warn(err);
    });
    

    它默认使用外部存储。要使用用户无法访问的沙盒存储,请将 true 添加为最后一个参数。

    【讨论】:

    • 链接失效
    • 感谢@Will,现在已修复
    • 该链接上仍然出现 github 404 错误。
    • 抱歉,这是私人的 :-|现在排序
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    相关资源
    最近更新 更多