在Swift中访问temp目录 [英] Accessing temp directory in Swift
本文介绍了在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屋!
查看全文