spe*_*tak 37 cocoa-touch objective-c uniqueidentifier file-management ios
我需要一种快速简便的方法来在iOS上存储具有唯一文件名的文件.我需要在文件前添加一个字符串,然后将生成的唯一标识符附加到末尾.我希望NSFileManager有一些方便的方法来做到这一点,但我似乎无法找到它.
我在看createFileAtPath:contents:attributes:,但不确定属性是否会给我这个唯一的文件名.
zap*_*aph 75
创建自己的文件名:
CFUUIDRef uuid = CFUUIDCreate(NULL);
CFStringRef uuidString = CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
NSString *uniqueFileName = [NSString stringWithFormat:@"%@%@", prefixString, (NSString *)uuidString];
CFRelease(uuidString);
Run Code Online (Sandbox Code Playgroud)
@darrinm在评论中提出的更简单的替代方案:
NSString *prefixString = @"MyFilename";
NSString *guid = [[NSProcessInfo processInfo] globallyUniqueString] ;
NSString *uniqueFileName = [NSString stringWithFormat:@"%@_%@", prefixString, guid];
NSLog(@"uniqueFileName: '%@'", uniqueFileName);
Run Code Online (Sandbox Code Playgroud)
NSLog输出:
uniqueFileName:'MyFilename_680E77F2-20B8-444E-875B-11453B06606E-688-00000145B460AF51'
注意:iOS6引入了NSUUID类,可用于代替CFUUID.
NSString *guid = [[NSUUID new] UUIDString];
Run Code Online (Sandbox Code Playgroud)
wzb*_*zon 10
我使用当前日期生成具有给定扩展名的随机文件名.这是我的NSFileManager类别中的方法之一:
+ (NSString*)generateFileNameWithExtension:(NSString *)extensionString
{
// Extenstion string is like @".png"
NSDate *time = [NSDate date];
NSDateFormatter* df = [NSDateFormatter new];
[df setDateFormat:@"dd-MM-yyyy-hh-mm-ss"];
NSString *timeString = [df stringFromDate:time];
NSString *fileName = [NSString stringWithFormat:@"File-%@%@", timeString, extensionString];
return fileName;
}
你也可以使用古老的mktemp()(见man 3 mktemp).像这样:
- (NSString*)createTempFileNameInDirectory:(NSString*)dir
{
NSString* templateStr = [NSString stringWithFormat:@"%@/filename-XXXXX", dir];
char template[templateStr.length + 1];
strcpy(template, [templateStr cStringUsingEncoding:NSASCIIStringEncoding]);
char* filename = mktemp(template);
if (filename == NULL) {
NSLog(@"Could not create file in directory %@", dir);
return nil;
}
return [NSString stringWithCString:filename encoding:NSASCIIStringEncoding];
}
Run Code Online (Sandbox Code Playgroud)
该XXXXX会以独特的字母/数字组合所取代.它们只能出现在模板的末尾,因此您不能在模板中附加扩展名(尽管您可以在获取唯一文件名后附加它).X在模板中添加任意数量的内容.
该文件未创建,您需要自己创建.如果您有多个线程在同一目录中创建唯一文件,则可能存在竞争条件.如果是这种情况,请使用mkstemp()创建文件并返回文件描述符.
超级简单的Swift 4 1-liner:
fileName = "MyFileName_" + UUID().uuidString
Run Code Online (Sandbox Code Playgroud)
或者
fileName = "MyFileName_" + ProcessInfo().globallyUniqueString
Run Code Online (Sandbox Code Playgroud)
在iOS 6中,最简单的方法是使用:
NSString *uuidString = [[NSUUID UUID] UUIDString];
Run Code Online (Sandbox Code Playgroud)
这是我最终在 Swift 3.0 中使用的
public func generateUniqueFilename (myFileName: String) -> String {
let guid = ProcessInfo.processInfo.globallyUniqueString
let uniqueFileName = ("\(myFileName)_\(guid)")
print("uniqueFileName: \(uniqueFileName)")
return uniqueFileName
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20816 次 |
| 最近记录: |