编写一个名为myfind命令行工具,它带有两个参数。第一个参数是开始搜索的初始目录,第二个参数是需要定位的文件名。
命令行$myfind /home test.m
#import <Foundation/Foundation?.h>
int main (int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSFileManager *fm;
NSString *startDir;
NSString *fileName;
BOOL isDir;
NSProcessInfo *proc = [NSProcessInfo processInfo];
NSArray *args = [proc arguments];
NSString *curPath;
NSDirectoryEnumerator *dirEnum;
int file_find_item = 0;
fm = [NSFileManager defaultManager];
Check for correct usage
if (argc != 3) {
NSLog(@"Usage: find <start_dir> <file_name>");
return 1;
}
startDir = [args objectAtIndex: 1];
fileName = [args objectAtIndex: 2];
//判断目录是否存在
[fm fileExistsAtPath: startDir isDirectory: &isDir];
Check that the first argument is a directory
if (!isDir) {
if (argc == 3) {
NSLog(@"Usage: find <start_dir> <file_name>");
return 1;
}
}
dirEnum = [fm enumeratorAtPath: startDir];//枚举目录的内容
while ((curPath = [dirEnum nextObject]) != nil) {
if ([[curPath lastPathComponent] isEqualToString: fileName]) {
NSLog(@"Found %@ located at %@", fileName, [startDir stringByAppendingPathComponent: [curPath stringByDeletingLastPathComponent]]);
file_find_item ++;
}
}
//curPath = [dirEnum nextObject] //返回下一级目录的内容。
//[curPath lastPathComponent] //提取路径的最后一个组成部分。
//stringByDeletingLastPathComponent //删除路径的最后一个组成部分。
if (file_find_item == 0)
NSLog(@"%@ not found", fileName);
[pool drain];
return 0;
}