Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android和iOS的文件浏览器_Android_Ios_Cordova_Sencha Touch_Phonegap Plugins - Fatal编程技术网

android和iOS的文件浏览器

android和iOS的文件浏览器,android,ios,cordova,sencha-touch,phonegap-plugins,Android,Ios,Cordova,Sencha Touch,Phonegap Plugins,我正在使用Cordova和Sencha Touch 2.4开发混合应用程序(POC),目标是开发文件资源管理器 实际上,我是用Cordova文件API实现的,我可以访问Android中的所有文件夹和文件,但在iOS中,我只能读取无云文件夹(不知道该文件夹是什么) 我想在iOS中访问完整的文件夹结构,就像Android一样 经过多次搜索后,我得到的信息是,在IOS中,我们无法使用Safari浏览器访问文件系统,混合应用程序也是这样吗 有没有其他方法可以做到这一点 这就是我正在做的,我正在使用文件A

我正在使用Cordova和Sencha Touch 2.4开发混合应用程序(POC),目标是开发文件资源管理器

实际上,我是用Cordova文件API实现的,我可以访问Android中的所有文件夹和文件,但在iOS中,我只能读取无云文件夹(不知道该文件夹是什么)

我想在iOS中访问完整的文件夹结构,就像Android一样

经过多次搜索后,我得到的信息是,在IOS中,我们无法使用Safari浏览器访问文件系统,混合应用程序也是这样吗

有没有其他方法可以做到这一点

这就是我正在做的,我正在使用文件API请求文件系统(根文件夹),当用户点击任何文件夹时,我正在读取该文件夹中的文件和文件夹。当用户点击文件时,我只是显示一个警报,提示用户选择了文件

Cordova[config.xml]

    <preference name="iosExtraFilesystems"
        value="library,library-nosync,documents,documents-nosync,cache,bundle,root" />

    <preference name="AndroidExtraFilesystems"
        value="files,files-external,documents,sdcard,cache,cache-external,root" />

控制器代码

browseFs : function(button, e, eOpts){
    Ext.Viewport.add(this.getFileBrowserWindow());
    this.getFileBrowserWindow().show();
    this.getFileBrowserWindow().mask();
    this.createFileSysList(MTDProduct.app.currentDir);
},

fileBack : function(button, e, eOpts){
    this.getFileBrowserWindow().mask();
    this.createFileSysList(MTDProduct.app.parentDir);
},

createFileSysList : function(currentDir){
    console.log(currentDir);
    var me = this;
    if(!currentDir){
        currentDir = MTDProduct.app.rootFolder;
    }
    MTDProduct.app.currentDir = currentDir;
    var directoryReader = currentDir.createReader();
    Ext.getStore('filesList').removeAll();
    directoryReader.readEntries(function(entries){
        var dirArr = new Array();
        var fileArr = new Array();
        for(var i=0; i<entries.length; ++i){ 
            var entry = entries[i];
            var data;
            if( entry.isDirectory && entry.name[0] != '.' ) {
                data = { name: entry.name, type: 'Directory'}
            }
            else if( entry.isFile && entry.name[0] != '.' ){
                data = { name: entry.name, type: 'File'}
            }
            Ext.getStore('filesList').add(data);
            Ext.getStore('filesList').sync();
        }

        currentDir.getParent(function(parent){ 
            MTDProduct.app.parentDir = parent; 
            me.getFileBack().show();
        }, 
        function(error){ 
            me.getFileBack().hide();
            alert('Get parent error: '+error.code);
        });
        me.getFileBrowserWindow().unmask();
    }, function(error){
        me.getFileBrowserWindow().unmask();
        alert('listDir readEntries error: '+error.code);
    });
},

fileTap : function( list, index, target, record, e, eOpts ){
    this.getFileBrowserWindow().mask();
    var data = record.getData();
    var currentDir = MTDProduct.app.currentDir;
    var me = this;
    if( data.type == 'Directory' && currentDir != null ){
        console.log('Directory');
        currentDir.getDirectory(data.name, {create:false},
            function(dir){
                me.createFileSysList(dir);
            },
            function(error){ 
                alert('Unable to find directory: '+error.code);
            }
        );
    } 
    else if(data.type == 'File' && currentDir != null){
        alert('Selected a file');

        me.getFileBrowserWindow().unmask();
        me.getFileBrowserWindow().hide();
    }       
}
browseFs:功能(按钮、e、eOpts){
add(this.getFileBrowserWindow());
这个.getFileBrowserWindow().show();
这个.getFileBrowserWindow().mask();
创建文件列表(MTDProduct.app.currentDir);
},
fileBack:功能(按钮、e、eOpts){
这个.getFileBrowserWindow().mask();
创建文件列表(MTDProduct.app.parentDir);
},
createFileSysList:函数(currentDir){
console.log(currentDir);
var me=这个;
如果(!currentDir){
currentDir=MTDProduct.app.rootFolder;
}
MTDProduct.app.currentDir=currentDir;
var directoryReader=currentDir.createReader();
Ext.getStore('filesList').removeAll();
directoryReader.readEntries(函数(条目){
var dirArr=新数组();
var fileArr=新数组();

对于(var i=0;i这是不可能的,苹果已经将文件访问权限限制在应用程序本身。因此,没有其他访问方式

您只能在应用程序的沙箱中查看文件。每个应用程序都有一个文档、缓存和临时文件夹。我认为前两个文件夹会在您连接设备时由iTunes自动备份,后者不会备份

例如,获取缓存目录路径中的文件-

NSError *err        = nil;
NSArray *myPathList = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *myPath    = [myPathList  objectAtIndex:0];
NSArray *dirContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:myPath error:&err];
if(err) NSLog(@"ERROR: %@",[err localizedDescription]);
NSMutableArray *filePaths  = nil;

int count = (int)[dirContent count];
for(int i=0; i<count; i++)
{
    [filePaths addObject:[dirContent objectAtIndex:i]];
}
return filePaths;
NSError*err=nil;
NSArray*myPathList=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
NSString*myPath=[myPathList objectAtIndex:0];
NSArray*dirContent=[[NSFileManager defaultManager]contentsOfDirectoryAtPath:myPath错误:&err];
if(err)NSLog(@“ERROR:%@,[err localizedDescription]);
NSMutableArray*文件路径=nil;
int count=(int)[dirContent count];

对于(int i=0;i你知道什么是“无云”文件夹吗?我不确定它是什么。这是错误的:“苹果已经将文件访问权限限制在应用程序本身(文档目录)。因此没有其他访问方式。”。还有一些其他文件夹,不只是文档目录,您稍后会提到,文档、缓存和临时文件夹(还有应用程序目录)。你应该说“苹果已经将文件访问权限限制在应用程序的沙箱、文档、缓存和临时文件夹中”“No Cloud”文件夹是文档或库文件夹中的一个文件夹,没有备份到iCloud