1

当我将当前目录路径更改为时,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)
4

2 回答 2

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.

于 2012-08-07T14:49:20.677 回答
1

由于您忽略了contentsOfDirectoryAtPath呼叫中的错误,因此呼叫完全有可能失败 - 因此为空。

如果不查看引用,您似乎正在寻找 directory .../newDir/newDir,一个可能不存在的目录。

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

于 2012-08-07T14:53:48.627 回答