无法使用“stringByAppendingPathComponent”附加文件名(基础)

时间:2012-11-02 08:55:56

标签: xcode nsstring filesystems nsfilemanager foundation

这里的问题是我无法使用“stringByAppendingPathComponent”附加文件名 fma是NSFileManager。

工作:

[fma changeCurrentDirectoryPath: [NSHomeDirectory() stringByAppendingPathComponent: @"Music/iTunes/iTunes Media/Music/ABC/DEF"]];
NSLog(@"Current Directory Path: %@", [fma currentDirectoryPath]); 

输出:当前目录路径:/ Users / plusa / Music / iTunes / iTunes Media / ABC / DEF

不工作:

[fma changeCurrentDirectoryPath: [NSHomeDirectory() stringByAppendingPathComponent: @"Music/iTunes/iTunes Media/Music/ABC/DEF/a.mp3"]];
NSLog(@"Current Directory Path: %@", [fma currentDirectoryPath]); // No change

更新

我要做的是创建一个简单的fileManager。

的main.m

#import <Foundation/Foundation.h>
#import "fileManager.h"

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

    @autoreleasepool {

        NSLog(@"Welcome to File Manager.");

        fileManager *fma = [[fileManager alloc] init];

        NSLog(@"Current Directory Path: %@", [fma currentDirectoryPath]);
        [fma changeCurrentDirectoryPath: [NSHomeDirectory() stringByAppendingPathComponent: @"Music/iTunes/iTunes Media/Music"]];
        NSLog(@"Directory Path changed to iTunes Music source base");

        [fma readCurrentItem];

    }
    return 0;
}

fileManager.h

#import <Foundation/Foundation.h>

@interface fileManager : NSFileManager {
    NSArray *list;
}

-(int) readCurrentItem;

@end

fileManager.m

#import "fileManager.h"

@implementation fileManager

-(int) readCurrentItem
{
    int i = 1;

    NSLog(@"Current Directory Path: %@", [self currentDirectoryPath]);
    NSLog(@"Reading Directory Path...");

    if(NSFileTypeDirectory == [[self attributesOfItemAtPath: [self currentDirectoryPath] error: nil] objectForKey: @"NSFileType"]) {
        list = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[self currentDirectoryPath] error: nil];
    } else {
        NSLog(@"File");
        return 0;
    }

    i = 1;
    for (NSString *item in list)
        NSLog(@"Item #%i: %@", i++, item);


    NSLog(@"The item to read:");
    scanf("%i", &i);

    if (i == 0) {
        NSLog(@"Shutdown.");
        return 0;
    }

    [self changeCurrentDirectoryPath: [[self currentDirectoryPath] stringByAppendingPathComponent: [list[(i - 1)] lastPathComponent]]];

    [self readCurrentItem];

}

@end

1 个答案:

答案 0 :(得分:1)

因为你的第二个例子是指文件,而不是目录。

据推测,路径正在正确组合,但NSFileManager并未改变文件的路径 - 因为它不是目录。