diff options
author | thomasvl <thomasvl@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2008-02-27 22:26:35 +0000 |
---|---|---|
committer | thomasvl <thomasvl@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3> | 2008-02-27 22:26:35 +0000 |
commit | 1270f0c1ee5cf31faadc6ca41cf487cdd9e91508 (patch) | |
tree | e746e426a90bc27032b342e2861c59fcae6d6f12 /Foundation/GTMNSFileManager+Path.m | |
parent | f38d4ee0e9157d2ac3c9a08fde37b9e19457fb0f (diff) |
Added GTMNSFileManager+Path for two small helpers.
Diffstat (limited to 'Foundation/GTMNSFileManager+Path.m')
-rw-r--r-- | Foundation/GTMNSFileManager+Path.m | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/Foundation/GTMNSFileManager+Path.m b/Foundation/GTMNSFileManager+Path.m new file mode 100644 index 0000000..6dec24b --- /dev/null +++ b/Foundation/GTMNSFileManager+Path.m @@ -0,0 +1,102 @@ +// +// GTMNSFileManager+Path.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 "GTMNSFileManager+Path.h" + +@implementation NSFileManager (GMFileManagerPathAdditions) + +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1050 + +- (BOOL)gtm_createFullPathToDirectory:(NSString *)path + attributes:(NSDictionary *)attributes { + if (!path) return NO; + + BOOL isDir; + BOOL exists = [self fileExistsAtPath:path isDirectory:&isDir]; + + // Quick check for the case where we have nothing to do. + if (exists && isDir) + return YES; + + NSString *actualPath = @"/"; + NSEnumerator *directoryEnumerator = [[path pathComponents] objectEnumerator]; + NSString *directory; + + while ((directory = [directoryEnumerator nextObject])) { + actualPath = [actualPath stringByAppendingPathComponent:directory]; + + if ([self fileExistsAtPath:actualPath isDirectory:&isDir] && isDir) { + continue; + } else if ([self createDirectoryAtPath:actualPath attributes:attributes]) { + continue; + } else { + return NO; + } + } + + return YES; +} + +#endif // MAC_OS_X_VERSION_MIN_REQUIRED < 1050 + +- (NSArray *)gtm_filePathsWithExtension:(NSString *)extension + inDirectory:(NSString *)directoryPath { + NSArray *extensions = nil; + + // Treat no extension and an empty extension as the user requesting all files + if (extension != nil && ![extension isEqualToString:@""]) + extensions = [NSArray arrayWithObject:extension]; + + return [self gtm_filePathsWithExtensions:extensions + inDirectory:directoryPath]; +} + +- (NSArray *)gtm_filePathsWithExtensions:(NSArray *)extensions + inDirectory:(NSString *)directoryPath { + if (directoryPath == nil) + return nil; + + // |basenames| will contain only the matching file names, not their full paths. + NSArray *basenames = [self directoryContentsAtPath:directoryPath]; + + // Check if dir doesn't exist or couldn't be opened. + if (basenames == nil) + return nil; + + // Check if dir is empty. + if ([basenames count] == 0) + return basenames; + + NSMutableArray *paths = [NSMutableArray arrayWithCapacity:[basenames count]]; + NSString *basename; + NSEnumerator *basenamesEnumerator = [basenames objectEnumerator]; + + // Convert all the |basenames| to full paths. + while ((basename = [basenamesEnumerator nextObject])) { + NSString *fullPath = [directoryPath stringByAppendingPathComponent:basename]; + [paths addObject:fullPath]; + } + + // Check if caller wants all files, regardless of extension. + if (extensions == nil || [extensions count] == 0) + return paths; + + return [paths pathsMatchingExtensions:extensions]; +} + +@end |