从特定位置目标c加载文本文件

时间:2011-12-03 15:05:07

标签: objective-c ios load nsfilemanager

我想知道如何从ios上的特定位置读取文件。

例如,我非常希望将相同名称的文件存储在不同的位置。

项目/文件/文本/ 1.txt的

项目/文件/ MoreText / 1.txt的

目前我可以加载文件,但我看不到如何指定特定目录。我的程序似乎加载了一个文件,无论它在哪里意味着我只能有一个文本文件或另一个文件。

我尝试过使用NSFileManager:

NSFileManager *filemanager = [NSFileManager defaultManager];

NSArray *filelist = [filemanager directoryContentsAtPath:@"Text"];

但我后来意识到这实际上并没有做任何事情。它只返回没有对象。我也看过NSBundle,但还没有看到返回特定文件的例子。

我需要文件名与我加载文件的算法相同。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:12)

如果要从应用程序包中读取文件并且想要某个目录结构,则需要在Finder中创建目录。然后在刚刚创建的主目录中创建所需的目录结构。现在将文件添加到相应的文件夹中,然后将主目录添加到项目中,方法是将其拖入Xcode。

以下是从主要包中读取的代码:

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Text/1" ofType:@"txt"];
    NSString *testString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%@",testString); 

这将从“Text”目录中读取文件“1.txt”。

答案 1 :(得分:2)

iOS应用程序会将所有文件保存到根目录,一个组(黄色图标)不是真正的目录。如果要将资源放入子目录,可以使用以下步骤:

  1. 在Finder中创建一个目录,将您的文件放入此目录。
  2. 在Xcode中,从“文件”菜单中选择“将文件添加到...”。
  3. 在弹出窗口中选择“将项目复制到目标组的文件夹”和“为任何添加的文件夹创建文件夹参考”。
  4. 然后,您将在项目中找到一个蓝色图标目录,它是一个真实的目录。

    现在,您可以使用NSBundle Class方法读取文件:

    + (NSArray *)pathsForResourcesOfType:(NSString *)extension inDirectory:(NSString *)bundlePath
    

答案 2 :(得分:0)

首先,请记住,默认情况下,所有文件在编译后都会转到1个目录。要将它们放到目录中,您必须在xCode中指定它。至于加载,你可以输入相对路径“MyDir / myFile.txt”

答案 3 :(得分:0)

相对路径在Mac OS X上不起作用 - 这是因为Cocoa忽略了当前目录,并且几乎随机变化。您需要始终使用绝对路径。要获取应用程序的Resources目录的绝对路径,请使用:

NSString *resDir = [[NSBundle mainBundle] resourcePath];

然后枚举该目录中Text目录的内容:

NSString *textDir = [resDir stringByAppendingPathComponent: @"Text"];
NSArray *textFiles = [[NSFileManager defaultManager] directoryContentsAtPath: textDir];

但是,Xcode可能会也可能不会尊重应用程序Resources目录中的文件层次结构。要确定文件是否符合您的预期,您应该构建应用,右键单击.app包,然后选择Show Package Contents