如何使用 Cordova 删除文件?

How to delete a file using Cordova?

注意:此问题正在重新发布,因为无论出于何种原因,原始发布者在提供并接受答案后决定将其删除。因此,我再次添加它以保存知识


原题:

我正在尝试了解 cordova appache 的 crud 操作是如何工作的。 我在 worklight 中创建了一个删除函数,如下所示:

index.html:

<a href="#" class="btn large" onclick="deleteAudio();">Delete the local MP3 file</a><br/>

main.js:

function deleteAudio() {
  var entry= "file:///data/data/com.TestApp/files/4638.mp3";
  function success(entry) {
    alert("Removal succeeded");
 }

  function fail(error) {
    alert('Error removing file: ' + error.code);
 }

// remove the file
entry.remove(success, fail);
}

尝试删除时,不是删除代码。我收到此错误:

10-11 09:54:14.419: E/NONE(1821): Uncaught Exception: Uncaught TypeError: Object file:///data/data/com.TestApp/files/4638.mp3 has no method 'remove' at (compiled_code):68

请问有什么帮助吗?谢谢。

您不能简单地拥有一个包含文件路径的变量并在其上使用 .remove 方法。对于所有意图和目的,它只是一个带有一些字符串的变量。这基本上就是错误所说的。它不知道 .remove 是什么。

.remove 只有在您获得对文件系统的访问权限后才可用。
以下作品:

var entry= "file:///data/data/com.TestApp/files/4638.mp3";

window.resolveLocalFileSystemURL (entry, 
    function (fileEntry) { 
        fileEntry.remove(
            function () { 
                alert('File is removed.'); 
            }, 
            function (error) {
                alert('Unable to remove file.');
            }
        ); 
    } 
); 

因为这会继续 ,这里是完整的例子:

index.html

<button id="downloadMP3">Download MP3 file</button><br/>
<button id="playMP3" disabled>Play MP3 file</button><br/>
<button id="stopMP3" disabled>Stop MP3 file</button><br/>           
<button id="deleteMP3" disabled>Delete MP3 file</button>

main.js

var mediaFile;
var mediaPlayback;

function wlCommonInit(){
    $("#downloadMP3").click(downloadMP3);
    $("#playMP3").click(playMP3);
    $("#stopMP3").click(stopMP3);    
    $("#deleteMP3").click(deleteMP3);
}

function downloadMP3() {
    var fileTransfer = new FileTransfer();
    var remoteFilePath = encodeURI("http://www.noiseaddicts.com/samples_1w72b820/4638.mp3");
    var localDownloadPath = cordova.file.dataDirectory + '4638.mp3';

    alert ("Downloading...");
    fileTransfer.download(
        remoteFilePath,
        localDownloadPath,
        function(successResponse) {
            mediaFile = successResponse.toURL();
            // Remove "file://" so file could be found and later played.
            mediaFile = mediaFile.replace('file://','');
            $('#playMP3').prop('disabled', false);
            $('#stopMP3').prop('disabled', false);            
            $('#deleteMP3').prop('disabled', false);
        },
        function(errorResponse) {
            alert (JSON.stringify(errorResponse));
        }
    );
}

function playMP3() {
    mediaPlayback = new Media(
            mediaFile,
            function() {
                alert("Finished playing audio file.");
            },
            function() {
                alert("Failed playing audio file.");
            }
        );

    mediaPlayback.play();
}

function stopMP3() {
    mediaPlayback.stop();
}

function deleteMP3() {
    // Put back "file://" since it is needed in order to be found.
    mediaFile = "file://" + mediaFile;

    window.resolveLocalFileSystemURL(mediaFile, 
        function (fileEntry) { 
            fileEntry.remove(
                function () { 
                alert('File is removed.'); 
            }, 
            function (error) {
                alert('Unable to remove file.');
            }); 
        } 
    ); 
}