7.5 创建及删除目录和文件

优质
小牛编辑
119浏览
2023-12-01

在7.1节中介绍过,Entry的getDirectorygetFile方法可以获取和创建子目录和文件,在本节将主要讲解创建目录和文件。同时也会介绍删除目录和文件的方法。

在调用getDirectory方法时,如果在参数对象中指定create属性为true,则会创建相应的子目录,如:

chrome.fileSystem.chooseEntry({type: 'openDirectory'}, function(Entry) {
    Entry.getDirectory('new_folder', {create: true}, function(subEntry) {
        //We'll do something with subEntry later
    }, errorHandler);
});

这将在用户所选择的目录下创建一个名为new_folder的子文件夹。同时也可以指定参数对象exclusive属性为true,这将避免创建同名子目录——如果一旦创建的目录名与一已存在的子目录相同,会返回错误,而不会自动使用其他目录名。

enter image description here
当指定exclusive为true,且创建同名目录时会抛出错误

同样在调用getFile方法时,参数对象中指定create属性为true会创建文件:

chrome.fileSystem.chooseEntry({type: 'openDirectory'}, function(Entry) {
    Entry.getFile('log.txt', {create: true}, function(fileEntry) {
        //We'll do something with fileEntry later
    }, errorHandler);
});

创建文件与创建目录基本相同,指定exclusive属性为true时,创建同名文件也会引起错误,所得到的错误信息与目录相同。

除了在用户选择的目录下创建文件外,也可以指定chooseEntry方法的打开类型为saveFile,这样用户看到的将不是一个目录选择窗口,而是一个另存为窗口:

chrome.fileSystem.chooseEntry({
    type: 'saveFile',
    suggestedName: 'log.txt'
}, function(fileEntry) {
    //We'll do something with fileEntry later
});

通过指定suggestedName的值可以在另存为窗口中给出默认文件名,但用户可以自行更改这个文件名。

enter image description here
带有默认文件名的另存为窗口

Entry和FileEntry的remove方法可以删除自身:

chrome.fileSystem.chooseEntry({type: 'openDirectory'}, function(Entry) {
    Entry.getDirectory('new_folder', {}, function(subEntry) {
        subEntry.remove(function(){
            console.log('Directory has been removed.');
        }, errorHandler);
    }, errorHandler);

    Entry.getFile('log.txt', {}, function(fileEntry) {
        fileEntry.remove(function(){
            console.log('File has been removed.');
        }, errorHandler);
    }, errorHandler);
});

对于目录来说,只有当目录不包含任何文件和子目录的时候remove方法才会调用成功,否则会报错。如果想删除包含内容的目录,需要使用removeRecursively方法:

chrome.fileSystem.chooseEntry({type: 'openDirectory'}, function(Entry) {
    Entry.getDirectory('new_folder', {}, function(subEntry) {
        subEntry.removeRecursively(function(){
            console.log('Directory has been removed.');
        }, errorHandler);
    }, errorHandler);
});