/core/externals/google-toolbox-for-mac/Foundation/GTMNSFileManager+Path.m
http://macfuse.googlecode.com/ · Objective C · 110 lines · 63 code · 23 blank · 24 comment · 19 complexity · 624708a008f26d69962dcb22c93d8432 MD5 · raw file
- //
- // 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"
- #import "GTMDefines.h"
- @implementation NSFileManager (GMFileManagerPathAdditions)
- #if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5)
- - (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 = @"/";
- NSString *directory;
- GTM_FOREACH_OBJECT(directory, [path pathComponents]) {
- 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 // GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5)
- - (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) {
- return nil;
- }
- // |basenames| will contain only the matching file names, not their full paths.
- #if GTM_IPHONE_SDK || (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5)
- NSArray *basenames = [self contentsOfDirectoryAtPath:directoryPath
- error:nil];
- #else
- NSArray *basenames = [self directoryContentsAtPath:directoryPath];
- #endif // MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5
- // Check if dir doesn't exist or couldn't be opened.
- if (!basenames) {
- return nil;
- }
- // Check if dir is empty.
- if ([basenames count] == 0) {
- return basenames;
- }
- NSMutableArray *paths = [NSMutableArray arrayWithCapacity:[basenames count]];
- NSString *basename;
- // Convert all the |basenames| to full paths.
- GTM_FOREACH_OBJECT(basename, basenames) {
- NSString *fullPath = [directoryPath stringByAppendingPathComponent:basename];
- [paths addObject:fullPath];
- }
- // Check if caller wants all files, regardless of extension.
- if ([extensions count] == 0) {
- return paths;
- }
- return [paths pathsMatchingExtensions:extensions];
- }
- @end