7.2 获取目录及文件操作对象
优质
小牛编辑
130浏览
2023-12-01
无论是操作文件还是操作目录,都是对相应的操作对象进行操作,所以第一步都需要获取到目录及文件操作对象。Chrome应用无法像C语言那样通过路径直接操作文件,目录及文件操作对象总是需要通过Chrome自带的文件选择窗口获取的。
通过chooseEntry
方法可以获取到目录及文件操作对象。当chooseEntry
被执行时,一个文件选择窗口会马上弹出,所以应该让一些事件来触发其运行,比如点击按钮等,否则可能会让用户感到困惑。
document.getElementById('openfile').onclick = function(){
chrome.fileSystem.chooseEntry({}, function(fileEntry){
console.log(fileEntry);
//do something with fileEntry
});
}
上面这段代码会让用户选择一个已存在的文件,并返回此文件对应的操作对象。如果在Manifest中声明了写权限,fileEntry
是可写的,否则是只读的。
在调用chooseEntry
方法时,我们在上例中传递了一个空对象,这个对象用来定义chooseEntry
打开的参数,默认情况下会以打开文件的方式获取操作对象。这个定义打开参数的对象完整结构如下:
{
type: 打开类型,包括openFile、openWritableFile、saveFile和openDirectory,
suggestedName: 建议的文件名,会自动显示在保存窗口的文件名输入框中,
accepts: [
{
description: 此选项的文字描述,
mimeTypes: [接受的mime类型,如"image/jpeg"或"audio/*"],
extensions: [接受的文件后缀,如"jpg"或"gif"]
}
],
acceptsAllTypes: 如果设定了接受的指定类型文件,是否接受所有的类型文件,
acceptsMultiple: 是否接受多个文件,只支持openFile和openWritableFile的打开方式
}
在参数对象中如果未指定type
属性,则默认为openFile
。由于在声明write
权限后openFile
方法获取的FileEntry
可写,所以请考虑避免使用openWritableFile
,因为在以后openWritableFile
很可能被openFile
替代。
但是saveFile
却无法被openFile
替代,因为saveFile
可以创建新的文件,openFile
则不可以。
将type
指定为openDirectory
则可以获取到目录操作对象:
document.getElementById('opendirectory').onclick = function(){
chrome.fileSystem.chooseEntry({type: 'openDirectory'}, function(Entry){
console.log(Entry);
//do something with Entry
});
}