Objective c 使用NSTemporaryDirectory时,我可以使用自己的文件名吗
我正在生成一个PDF文件,并将其保存到我的设备中,然后再从我的应用程序中发送电子邮件。目前,它没有手动或自动清除,因此我正在查看NSTemporaryDirectory。我查看了各种网站,也在这里寻找我的具体问题的答案,但找不到它 我有以下功能:Objective c 使用NSTemporaryDirectory时,我可以使用自己的文件名吗,objective-c,ios,Objective C,Ios,我正在生成一个PDF文件,并将其保存到我的设备中,然后再从我的应用程序中发送电子邮件。目前,它没有手动或自动清除,因此我正在查看NSTemporaryDirectory。我查看了各种网站,也在这里寻找我的具体问题的答案,但找不到它 我有以下功能: +(NSString *)getTempFilePathName { NSString *tempFilePathName = nil; NSString *tempFileTemplate = [NSTemporaryDirector
+(NSString *)getTempFilePathName {
NSString *tempFilePathName = nil;
NSString *tempFileTemplate = [NSTemporaryDirectory() stringByAppendingPathComponent:@"tempfile.XXXXXX"];
const char *tempFileTemplateCString = [tempFileTemplate fileSystemRepresentation];
char *tempFileNameCString = (char *)malloc(strlen(tempFileTemplateCString) + 1);
strcpy(tempFileNameCString, tempFileTemplateCString);
int fileDescriptor = mkstemp(tempFileNameCString);
if (fileDescriptor != -1) {
// File opened successfully
tempFilePathName = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:tempFileNameCString length:strlen(tempFileNameCString)];
close(fileDescriptor);
}
free(tempFileNameCString);
return tempFilePathName;
}
这将返回一个NSString,其中包含临时文件的完整路径和文件名,以文件名的“XXXXXX”组件结尾,并替换为字母和数字的唯一组合。当我用它来保存PDF文件时,我需要修复扩展名为“.PDF”的“XXXXXX”位。最好我也要指定文件名本身,比如“Order-123.PDF”
我可以编辑我的方法以传入文件名并在stringByAppendingPathComponent参数中使用它吗?每次调用此方法生成的目录名是否唯一 我自己解决了这个问题。在调用上述例程的行之后,我执行以下操作:
NSString *newFilePath = [tempNameStub stringByAppendingPathExtension:@"pdf"];
这将
.pdf
添加到末尾。我自己解决了这个问题。在调用上述例程的行之后,我执行以下操作:
NSString *newFilePath = [tempNameStub stringByAppendingPathExtension:@"pdf"];
它在结尾添加了
.pdf
。我不得不问为什么?临时目录的全部要点是,只要需要,就保持文件处于打开状态,然后所有赌注都结束。如果您想再次引用该文件,缓存文件夹可能是更好的选择。我正在生成的文件已创建并通过电子邮件发送,因此无需再次访问。很高兴iOS把它放在这个地方,3天后它会自动清理。所以我认为这是最好的方法。唯一的问题是,它需要一个PDF扩展名,以便电子邮件文件能够被正确识别,并且能够被任何接收到它的人加载,而不必重命名它。我不得不问为什么?临时目录的全部要点是,只要需要,就保持文件处于打开状态,然后所有赌注都结束。如果您想再次引用该文件,缓存文件夹可能是更好的选择。我正在生成的文件已创建并通过电子邮件发送,因此无需再次访问。很高兴iOS把它放在这个地方,3天后它会自动清理。所以我认为这是最好的方法。唯一的问题是,它需要一个PDF扩展名,以便电子邮件文件能够被正确识别,并且能够被任何接收到它的人加载,而无需重命名它。