| // |
| // 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) |
| |
| - (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. |
| NSArray *basenames = [self contentsOfDirectoryAtPath:directoryPath |
| error:nil]; |
| |
| |
| // 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. |
| for (basename in 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 |