当我将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)
答案 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
是新的,因此它不会包含任何条目(除了。和..)。