从文件读取:文件不存在

时间:2013-10-08 10:46:29

标签: objective-c

我在C#和Objective-C都有一个应用程序,它必须从文本文件中读取。由于文本文件是在App之后创建的,因此用户可以选择将其保存在任何位置。在C#中,找到文件并不困难,只使用完整路径的文件名。在Objective-C中,这似乎很难。我不能要求用户将其保存在特定路径中,这违反了Apple的App规则。任何想法如何只用文件名搜索特定的文件?在我的试用期间,我使用NSFileManager来检测文件,如果文件保存在应用程序(Mac)中,应用程序可以读取文件,但是如果我将文件保存在Documents或其他任何地方,请给我错误:'文件不存在”。

1 个答案:

答案 0 :(得分:0)

您可以将txt文件保存在app文件夹中。您可以创建目录。

以下是在Documents目录中创建目录的一些代码。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSFileManager *flmngr = [NSFileManager defaultManager];
BOOL isDir;
if (![flmngr fileExistsAtPath:[NSString stringWithFormat:@"%@/yourDicretoryName", documentsDirectory] isDirectory:&isDir]) {

    [flmngr createDirectoryAtPath:[NSString stringWithFormat:@"%@/yourDicretoryName", documentsDirectory]
      withIntermediateDirectories:NO
                       attributes:nil
                            error:nil];
}
创建特定目录后

。您可以保存您的txt文件。假设你有一个nsstring

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/txtFile.txt",documentsDirectory];
[yourString writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];

保存txt文件后,您可以这样阅读。

NSString *stringTxt = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];

您可以使用代码

获取目录中的文件列表
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSError *error;
NSMutableArray *fileList = [[NSMutableArray alloc]initWithArray:[[NSFileManager defaultManager] contentsOfDirectoryAtPath:[NSString stringWithFormat:@"%@/yourDirectory", documentsDirectory] error:&error]];

-contentsOfDirectoryAtPath

返回NSArray对象。使用目录中的文件名。

适用于Cocoa Thouch Mac应用程序。

您可以使用代码创建目录:

NSFileManager *fileManager= [NSFileManager defaultManager]; 
if(![fileManager fileExistsAtPath:directory isDirectory:&isDir])
if(![fileManager createDirectoryAtPath:directory withIntermediateDirectories:YES attributes:nil error:NULL])
    NSLog(@"Error: Create folder failed %@", directory);

您可以使用代码选择目录:

NSOpenPanel* panel = [NSOpenPanel openPanel];
    [panel setCanSelectHiddenExtension:NO];
    [panel setCanChooseDirectories:YES];
    [panel setCanChooseFiles:NO];
    [panel setTitle:@"Kaydetmek için Dosya Yolunu Seçin!"];
    [panel beginWithCompletionHandler:^(NSInteger result){
        if (result == NSFileHandlingPanelOKButton) {
            directoryPath = [[[panel URLs] objectAtIndex:0]path];
            directoryPath = [directoryPath stringByReplacingOccurrencesOfString:@"file://localhost" withString:@""];
        }
    }];

写文件仍然相同。但您可以将您的文档桌面保存在选定或创建的目录等中。

获取文件列表是一样的。