mirror of
https://github.com/wu736139669/ManagerDemo.git
synced 2026-08-05 05:55:42 +00:00
116 lines
3.0 KiB
Objective-C
116 lines
3.0 KiB
Objective-C
//
|
|
// NSString+DTPaths.m
|
|
// DTFoundation
|
|
//
|
|
// Created by Oliver Drobnik on 2/15/12.
|
|
// Copyright (c) 2012 Cocoanetics. All rights reserved.
|
|
//
|
|
|
|
#import "NSString+DTPaths.h"
|
|
|
|
@implementation NSString (DTPaths)
|
|
|
|
#pragma mark Standard Paths
|
|
|
|
+ (NSString *)cachesPath
|
|
{
|
|
static dispatch_once_t onceToken;
|
|
static NSString *cachedPath;
|
|
|
|
dispatch_once(&onceToken, ^{
|
|
cachedPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
|
|
});
|
|
|
|
return cachedPath;
|
|
}
|
|
|
|
+ (NSString *)documentsPath
|
|
{
|
|
static dispatch_once_t onceToken;
|
|
static NSString *cachedPath;
|
|
|
|
dispatch_once(&onceToken, ^{
|
|
cachedPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
|
|
});
|
|
|
|
return cachedPath;
|
|
}
|
|
|
|
#pragma mark Temporary Paths
|
|
|
|
+ (NSString *)temporaryPath
|
|
{
|
|
static dispatch_once_t onceToken;
|
|
static NSString *cachedPath;
|
|
|
|
dispatch_once(&onceToken, ^{
|
|
cachedPath = NSTemporaryDirectory();
|
|
});
|
|
|
|
return cachedPath;
|
|
}
|
|
|
|
+ (NSString *)pathForTemporaryFile
|
|
{
|
|
CFUUIDRef newUniqueId = CFUUIDCreate(kCFAllocatorDefault);
|
|
CFStringRef newUniqueIdString = CFUUIDCreateString(kCFAllocatorDefault, newUniqueId);
|
|
NSString *tmpPath = [[NSString temporaryPath] stringByAppendingPathComponent:(__bridge NSString *)newUniqueIdString];
|
|
CFRelease(newUniqueId);
|
|
CFRelease(newUniqueIdString);
|
|
|
|
return tmpPath;
|
|
}
|
|
|
|
#pragma mark Working with Paths
|
|
|
|
- (NSString *)pathByIncrementingSequenceNumber
|
|
{
|
|
NSString *baseName = [self stringByDeletingPathExtension];
|
|
NSString *extension = [self pathExtension];
|
|
|
|
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\(([0-9]+)\\)$" options:0 error:NULL];
|
|
__block NSInteger sequenceNumber = 0;
|
|
|
|
[regex enumerateMatchesInString:baseName options:0 range:NSMakeRange(0, [baseName length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){
|
|
|
|
NSRange range = [match rangeAtIndex:1]; // first capture group
|
|
NSString *substring= [self substringWithRange:range];
|
|
|
|
sequenceNumber = [substring integerValue];
|
|
*stop = YES;
|
|
}];
|
|
|
|
NSString *nakedName = [baseName pathByDeletingSequenceNumber];
|
|
|
|
if ([extension isEqualToString:@""])
|
|
{
|
|
return [nakedName stringByAppendingFormat:@"(%d)", (int)sequenceNumber+1];
|
|
}
|
|
|
|
return [[nakedName stringByAppendingFormat:@"(%d)", (int)sequenceNumber+1] stringByAppendingPathExtension:extension];
|
|
}
|
|
|
|
- (NSString *)pathByDeletingSequenceNumber
|
|
{
|
|
NSString *baseName = [self stringByDeletingPathExtension];
|
|
|
|
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\([0-9]+\\)$" options:0 error:NULL];
|
|
__block NSRange range = NSMakeRange(NSNotFound, 0);
|
|
|
|
[regex enumerateMatchesInString:baseName options:0 range:NSMakeRange(0, [baseName length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop) {
|
|
|
|
range = [match range];
|
|
|
|
*stop = YES;
|
|
}];
|
|
|
|
if (range.location != NSNotFound)
|
|
{
|
|
return [self stringByReplacingCharactersInRange:range withString:@""];
|
|
}
|
|
|
|
return self;
|
|
}
|
|
|
|
@end
|