在Swift中访问temp目录 [英] Accessing temp directory in Swift

查看:114
本文介绍了在Swift中访问temp目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图访问临时目录在Swift。在Objective-C中,我可以使用下面的代码:

   - (NSString *)tempDirectory {

NSString * tempDirectoryTemplate =
[NSTemporaryDirectory()stringByAppendingPathComponent:@XXXXX];
const char * tempDirectoryTemplateCString = [tempDirectoryTemplate fileSystemRepresentation];
char * tempDirectoryNameCString =(char *)malloc(strlen(tempDirectoryTemplateCString)+ 1);
strcpy(tempDirectoryNameCString,tempDirectoryTemplateCString);
char * result = mkdtemp(tempDirectoryNameCString);
if(!result){
return nil;
}
NSString * tempDirectoryPath = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:tempDirectoryNameCString length:strlen(result)];
free(tempDirectoryNameCString);
return tempDirectoryPath;
}

但是,我有点困惑的类型转换和从目标-C to Swift,例如 const char * CMutablePointer

解决方案

p>如下所示:

  func createTempDirectory() - >串? {
let tempDirectoryTemplate = NSTemporaryDirectory()。stringByAppendingPathComponent(XXXXX)

let fileManager = NSFileManager.defaultManager()

var err:NSErrorPointer = nil
if fileManager.createDirectoryAtPath(tempDirectoryTemplate,withIntermediateDirectories:true,attributes:nil,error:err){
return tempDirectoryTemplate
} else {
return nil
}
}

它不回答你关于char *的问题,但它更干净...



NSFileManager参考此处



还可以查看关于唯一名称的此SO问题


I was trying to access temp directory in Swift. In Objective-C, I could use the following code to do so:

- (NSString *)tempDirectory {

    NSString *tempDirectoryTemplate =
    [NSTemporaryDirectory() stringByAppendingPathComponent:@"XXXXX"];
    const char *tempDirectoryTemplateCString = [tempDirectoryTemplate fileSystemRepresentation];
    char *tempDirectoryNameCString           = (char *)malloc(strlen(tempDirectoryTemplateCString) + 1);
    strcpy(tempDirectoryNameCString, tempDirectoryTemplateCString);
    char *result                             = mkdtemp(tempDirectoryNameCString);
    if (!result) {
        return nil;
    }
    NSString *tempDirectoryPath = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:tempDirectoryNameCString length:strlen(result)];
    free(tempDirectoryNameCString);
    return tempDirectoryPath;
}

However, I'm a bit confuse about the type conversion and casting from Objective-C to Swift, such as const char * or CMutablePointer<CChar>. Is there any documents that I should look into?

Thanks.

解决方案

How about something like :

func createTempDirectory() -> String? {
    let tempDirectoryTemplate = NSTemporaryDirectory().stringByAppendingPathComponent("XXXXX")

    let fileManager = NSFileManager.defaultManager()

    var err: NSErrorPointer = nil
    if fileManager.createDirectoryAtPath(tempDirectoryTemplate, withIntermediateDirectories: true, attributes: nil, error: err) {
        return tempDirectoryTemplate
    } else {
        return nil
    }
}

It doesn't answer your question about char* but it's cleaner...

NSFileManager reference here.

Also check out this SO question regarding unique names.

这篇关于在Swift中访问temp目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆