【问题标题】:Google Drive iOS SDK谷歌云端硬盘 iOS SDK
【发布时间】:2014-02-15 12:14:27
【问题描述】:

我想检查一个文件夹是否存在并且只有当它不存在时才创建一个新的。但是,该文件夹可能是根文件夹或其他文件夹的子文件夹。那么如何在 Unix 上执行 mkdirs 之类的操作,在其中给它一个路径并在路径中创建所有目录?

顺便说一句 - SDK 使用起来有点令人沮丧,因为它似乎没有办法使用文件系统路径。相反,您必须进行大量非常混乱的查询和回调。 W

这是我用来创建文件夹的:

- (void)createFolder:(NSString *)folderName completion:(void (^)(GTLDriveFile * file, NSError *))handler {
    NSLog(@"createFolder:%@ completion:", folderName);

    GTLDriveFile *folder = [GTLDriveFile object];
    folder.title = folderName;
    folder.mimeType = @"application/vnd.google-apps.folder";

    GTLQueryDrive *query = [GTLQueryDrive queryForFilesInsertWithObject:folder uploadParameters:nil];
    [self.driveService executeQuery:query completionHandler:^(GTLServiceTicket *ticket, GTLDriveFile *updatedFile, NSError *error) {
        if (error == nil) {
            NSLog(@"Created folder");
            handler(updatedFile, nil);
        } else {
            NSLog(@"An error occurred: %@", error);
            handler(updatedFile, error);
        }
    }];
}

【问题讨论】:

    标签: google-drive-api


    【解决方案1】:

    没有简单的方法。

    *nix 文件系统是分层的,而 Google Drive 文件系统不是。 UI 和 API 引用“文件夹”的东西,但这些只是标签/标签。

    因此,如果您想要一个文件夹层次结构,您需要自己构建它(可能正如您所想的那样)。没有捷径。

    您可能会发现通过搜索所有文件夹来启动您的应用程序

    q = "mimeType = 'application/vnd.google-apps.folder'"
    

    要走的路

    【讨论】:

    • 我看到的一个问题是存在检查和创建调用不是原子的。一个对 createFolder: 的调用可能会在另一个调用完成创建之前执行检查。
    • 没错。营销名称“驱动器”所暗示的东西类似于硬盘驱动器,实际上是松散耦合的服务器场,有很多异步更新正在进行。如果您的应用程序采用这种范式,那还不错。任何试图将 Drive 视为驱动器的应用程序都将失败。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多