【问题标题】:PhoneGap (Android) Delete DirectoryPhoneGap (Android) 删除目录
【发布时间】:2012-11-13 04:34:43
【问题描述】:

我正在尝试使用PhoneGap on Android 删除一个目录及其内容:

deleteDirectory = function deleteDirectory(uri) {
    uri = uri.substring(0, uri.lastIndexOf('/'));
    return $.Deferred(function (def) {
        fileSystem.root.getDirectory(uri, {
            create: false
        }, function (directory) {
            directory.removeRecursively();
            def.resolve();
        }, function (error) {
            resolveError("Error deleting directory: ", error, def);
        });
    }).promise();
}

出现以下错误:File No Modification Allowed Error

我已确认已设置此权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我还应该去哪里寻找?

【问题讨论】:

  • 您要删除哪个目录?是在 SD 卡上还是在内部存储上?
  • 在 Nexus 7 的下载文件夹中添加的子文件夹:file:///storage/sdcard0/Download/somedir/dirtodelete 我猜这将被视为内部的,因此 WRITE_EXTERNAL_STORAGE 将不起作用...将添加 WRITE_INTERNAL_STORAGE 以查看是否是它.
  • WRITE_INTERNAL_STORAGE 似乎也不起作用。
  • 你不是第一个抱怨 Nexus 7 异常行为的人。我必须看看是否有人可以运行测试套件。

标签: android cordova


【解决方案1】:

我已经用这种方法做到了:

function ClearDirectory() { window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail); function fail(evt) { alert("FILE SYSTEM FAILURE" + evt.target.error.code); } function onFileSystemSuccess(fileSystem) { fileSystem.root.getDirectory( "yours/dir/ect/ory", {create : true, exclusive : false}, function(entry) { entry.removeRecursively(function() { console.log("Remove Recursively Succeeded"); }, fail); }, fail); } }

【讨论】:

    【解决方案2】:

    来自answer

    如果您想访问,我建议使用 resolveLocalFileSystemURL cordova.file.* 下的位置(例如 cordova.file.dataDirectory),其中 大部分时间(如果不是总是),如果你使用 requestFileSystem 需要访问文件系统的根目录。

    这样也省了几行代码,可读性更强:

    deleteFolder(fileName: string) {
        const uri = `${cordova.file.dataDirectory}${fileName}`;
        window.resolveLocalFileSystemURL(uri, (dirEntry: DirectoryEntry) => {
            dirEntry.removeRecursively(
                () => console.log('successfully deleted the folder and its content'),
                e => console.error('there was an error deleting the directory', e.toString())
            )
        });
    }
    

    这里有一个等待的版本:

    deleteFolder(fileName: string): Promise<void> {
        const promise = new Promise<void>((resolve, reject) => {
            const uri = `${cordova.file.dataDirectory}${fileName}`;
            window.resolveLocalFileSystemURL(uri, (dirEntry: DirectoryEntry) => {
                dirEntry.removeRecursively(() => resolve(), e => reject(e));
            }, e => reject(e));
        });
        return promise;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多