// // GTMNSString+FindFolder.m // // Copyright 2006-2008 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. // #import "GTMNSString+FindFolder.h" #import "GTMDefines.h" @implementation NSString (GTMStringFindFolderAdditions) + (NSString *)gtm_stringWithPathForFolder:(OSType)theFolderType inDomain:(short)theDomain doCreate:(BOOL)doCreate { NSString* folderPath = nil; FSRef folderRef; OSErr err = FSFindFolder(theDomain, theFolderType, doCreate, &folderRef); if (err == noErr) { CFURLRef folderURL = CFURLCreateFromFSRef(kCFAllocatorSystemDefault, &folderRef); if (folderURL) { folderPath = GTMCFAutorelease(CFURLCopyFileSystemPath(folderURL, kCFURLPOSIXPathStyle)); CFRelease(folderURL); } } return folderPath; } + (NSString *)gtm_stringWithPathForFolder:(OSType)theFolderType subfolderName:(NSString *)subfolderName inDomain:(short)theDomain doCreate:(BOOL)doCreate { NSString *resultPath = nil; NSString *subdirPath = nil; NSString *parentFolderPath = [self gtm_stringWithPathForFolder:theFolderType inDomain:theDomain doCreate:doCreate]; if (parentFolderPath) { // find the path to the subdirectory subdirPath = [parentFolderPath stringByAppendingPathComponent:subfolderName]; NSFileManager* fileMgr = [NSFileManager defaultManager]; BOOL isDir = NO; if ([fileMgr fileExistsAtPath:subdirPath isDirectory:&isDir] && isDir) { // it already exists resultPath = subdirPath; } else if (doCreate) { parentFolderPath = [parentFolderPath stringByResolvingSymlinksInPath]; NSDictionary* attrs = nil; BOOL createdSubDir = NO; // create the subdirectory with the parent folder's attributes #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 NSError *error = nil; attrs = [fileMgr attributesOfItemAtPath:parentFolderPath error:&error]; if (error) { _GTMDevLog(@"Error %@ getting attributes of %@", error, parentFolderPath); } createdSubDir = [fileMgr createDirectoryAtPath:subdirPath withIntermediateDirectories:YES attributes:attrs error:&error]; if (error) { _GTMDevLog(@"Error %@ creating directory at %@", error, subdirPath); } #else attrs = [fileMgr fileAttributesAtPath:parentFolderPath traverseLink:YES]; createdSubDir = [fileMgr createDirectoryAtPath:subdirPath attributes:attrs]; #endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5 if (createdSubDir) { resultPath = subdirPath; } } } return resultPath; } @end