如何检查Objective-C中是否存在目录

n.e*_*ind 27 iphone cocoa-touch objective-c nsfilemanager

我想这是一个初学者的问题,但我试图检查iPhone上的Documents文件夹中是否存在目录.我阅读了文档并提出了这段代码,遗憾的是,它在BOOL fileExists行中与EXC_BAD_ACCESS崩溃:

 -(void)checkIfDirectoryAlreadyExists:(NSString *)name
{
    NSFileManager *fileManager = [[NSFileManager alloc] init];

    NSString *path = [[self documentsDirectory] stringByAppendingPathComponent:name];

    BOOL fileExists = [fileManager fileExistsAtPath:path isDirectory:YES];

    if (fileExists)
    {
        NSLog(@"Folder already exists...");
    }

}
Run Code Online (Sandbox Code Playgroud)

我不明白我做错了什么?它看起来对我来说都很完美,它肯定符合文档,不是吗?关于我哪里出错的任何启示都将受到高度赞赏!谢谢.

更新:

还是行不通...

  -(void)checkIfDirectoryAlreadyExists:(NSString *)name
{
    NSFileManager *fileManager = [[NSFileManager alloc] init];

    NSString *path = [[self documentsDirectory] stringByAppendingPathComponent:name];

    BOOL isDir;
    BOOL fileExists = [fileManager fileExistsAtPath:path isDirectory:&isDir];

    if (fileExists)
    {


        if (isDir) {

            NSLog(@"Folder already exists...");

        }

    }

}
Run Code Online (Sandbox Code Playgroud)

sid*_*yll 86

请查看此方法签名的文档:

- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory
Run Code Online (Sandbox Code Playgroud)

您需要一个指向BOOL var作为参数的指针,而不是BOOL本身.NSFileManager将记录该文件是否是该变量中的目录.例如:

BOOL isDir;
BOOL exists = [fm fileExistsAtPath:path isDirectory:&isDir];
if (exists) {
    /* file exists */
    if (isDir) {
        /* file is a directory */
    }
 }
Run Code Online (Sandbox Code Playgroud)


wzb*_*zon 11

万一有人需要一个getter,如果它不存在,会在Documents中创建一个文件夹:

- (NSString *)folderPath
{
    if (! _folderPath) {
        NSString *folderName = @"YourFolderName";
        NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectoryPath = [documentPaths objectAtIndex:0];
        _folderPath = [documentsDirectoryPath stringByAppendingPathComponent:folderName];

        // if folder doesn't exist, create it
        NSError *error = nil;
        NSFileManager *fileManager = [NSFileManager defaultManager];
        BOOL isDir;
        if (! [fileManager fileExistsAtPath:_folderPath isDirectory:&isDir]) {
            BOOL success = [fileManager createDirectoryAtPath:_folderPath withIntermediateDirectories:NO attributes:nil error:&error];
            if (!success || error) {
                NSLog(@"Error: %@", [error localizedDescription]);
            }
            NSAssert(success, @"Failed to create folder at path:%@", _folderPath);
        }
    }

    return _folderPath;
}
Run Code Online (Sandbox Code Playgroud)