iPhone : Get the file path which is within subfolder of Resource folder

后端 未结 4 418
死守一世寂寞
死守一世寂寞 2020-12-09 12:24

I am new to iPhone programming. I want to read the content of a text file located in a subfolder of the Resource folder.

The Resource folder structure is the followi

相关标签:
4条回答
  • 2020-12-09 12:59

    To continue psychotiks answer a full example would look like this:

    NSBundle *thisBundle = [NSBundle bundleForClass:[self class]];
    NSString *filePath = nil;
    
    if (filePath = [thisBundle pathForResource:@"Data" ofType:@"txt" inDirectory:@"Folder1"])  {
    
        theContents = [[NSString alloc] initWithContentsOfFile:filePath];
    
        // when completed, it is the developer's responsibility to release theContents
    
    }
    

    Notice that you can use -pathForResource:ofType:inDirectory to access ressources in sub directories.

    0 讨论(0)
  • 2020-12-09 13:10

    Your "resource folder" is actually the contents of your main bundle, also know as the application bundle. You use pathForResource:ofType: or pathForResource:ofType:inDirectory: to get the full path for a resource.

    Loading the contents of a file as a string is done with the stringWithContentsOfFile:encoding:error: method for an autoreleased string of with initWithContentsOfFile:encoding:error: if you want a retained string.

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Data" 
                                                         ofType:@"txt"
                                                    inDirectory:@"Folder1"];
    if (filePath != nil) {
      theContents = [NSString stringWithContentsOfFile:filePath
                                              encoding:NSUTF8StringEncoding
                                                 error:NULL];
      // Do stuff to theContents
    }
    

    This is almost the same answer as given by Shirkrin previously, but with the slight difference that it works on target. This is because initWithContentsOfFile: is deprecated on Mac OS X, and not available at all iPhone OS.

    0 讨论(0)
  • 2020-12-09 13:20

    Shirkrin's answer and PeyloW's answer above were both useful, and I managed to use pathForResource:ofType:inDirectory: to access files with the same name in different folders in my app bundle.

    I also found an alternative solution here that suited my requirements slightly better, so I thought I'd share it. In particular, see this link.

    For example, say I have the following Folder References (blue icons, Groups are yellow):

    enter image description here

    Then I can access the image files like this:

    NSString * filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"pin_images/1/2.jpg"];
    UIImage * image = [UIImage imageWithContentsOfFile:filePath];
    

    As a side note, the pathForResource:ofType:inDirectory: equivalent looks like this:

    NSString * filePath = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"jpg" inDirectory:@"pin_images/1/"];
    
    0 讨论(0)
  • 2020-12-09 13:22
        NSBundle* bundle = [NSBundle mainBundle];
        NSString* path = [bundle bundlePath];
    

    This gives you the path to your bundle. From there on, you can navigate your folder structure.

    0 讨论(0)
提交回复
热议问题