困惑于创建新目录和更改目录(Objective-C)

时间:2012-08-07 14:43:21

标签: objective-c directory

当我将main.m的当前目录路径更改为newDir时,为什么它仍然说newDir中没有文件?我也多次运行这个程序没有错误。这是否意味着我最终创建了多个newDir

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

    @autoreleasepool {
        NSString *newDir = @"newDir";
        NSFileManager *manager = [NSFileManager defaultManager];

        if ([manager createDirectoryAtPath:newDir withIntermediateDirectories:YES attributes:nil error:NULL] == NO) {
            NSLog(@"couldnt create new directory");
            return 1;
        }

        if ([manager changeCurrentDirectoryPath: newDir] == NO) {
            NSLog(@"couldnt change directory path");
            return 2;
        }

        NSLog(@"%@", [manager currentDirectoryPath]);
        NSLog(@"%@", [manager contentsOfDirectoryAtPath:newDir error:NULL]);
    }
    return 0;
}

输出:

2012-08-07 10:27:20.428 Test[853:707] /Users/ss/Library/Developer/Xcode/DerivedData/Test-bfrqtnrhaafmdzghoyirjnfqjbfc/Build/Products/Debug/newDir
2012-08-07 10:36:47.832 Test[885:707] (null)

2 个答案:

答案 0 :(得分:1)

main.m的路径不会影响您运行程序时发生的情况:唯一的问题是目录是否包含任何文件,而且从日志中可以看出它没有。

要在目录中创建一些文件,请在终端窗口中运行以下命令:

touch /Users/ss/Library/Developer/Xcode/DerivedData/Test-bfrqtnrhaafmdzghoyirjnfqjbfc/Build/Products/Debug/newDir/quick.txt
touch /Users/ss/Library/Developer/Xcode/DerivedData/Test-bfrqtnrhaafmdzghoyirjnfqjbfc/Build/Products/Debug/newDir/brown.txt
touch /Users/ss/Library/Developer/Xcode/DerivedData/Test-bfrqtnrhaafmdzghoyirjnfqjbfc/Build/Products/Debug/newDir/fox.txt

这将创建三个空文件。现在运行您的程序,看看它是否发现了新创建的txt文件;应该。

关于第二个问题,操作系统不允许您创建具有相同名称的多个文件系统对象,因此答案为否,您只创建了一个newDir

答案 1 :(得分:1)

由于您忽略了contentsOfDirectoryAtPath来电时的错误,因此调用完全可能失败 - 因此无效。

在不查看引用的情况下,您似乎正在查找目录.../newDir/newDir,这是一个可能不存在的目录。

无论如何,由于newDir是新的,因此它不会包含任何条目(除了。和..)。