用写入文件失败

我正在尝试从一个文件中提取内容并将其写入另一个文件。 我正在阅读,但我不能将其写入另一个文件。

我有一个单词数据库。 我想根据字母数字将这些单词分成不同的文件。 所有四个字母单词都归入一个文件,依此类推。 我在我的资源中添加了一个名为“4letter”的txt文件,下面是我的代码:

NSError *error; //READ NSString *dbFile = [[NSBundle mainBundle] pathForResource:@"words" ofType:@"txt"]; NSString *test = [NSString stringWithContentsOfFile:dbFile encoding:NSUTF8StringEncoding error:&error]; //convert from string to array NSArray *lines = [test componentsSeparatedByString:@"\n"]; NSFileHandle *logFile = nil; logFile = [NSFileHandle fileHandleForWritingAtPath:[[NSBundle mainBundle] pathForResource:@"4letter" ofType:@"txt"]]; //Test if write works for (int i=0; i<5; i++) { NSString *randomAnagram = [[lines objectAtIndex:i] lowercaseString]; [logFile writeData: [randomAnagram dataUsingEncoding: NSNEXTSTEPStringEncoding]]; } 

在iOS中,不能写入应用程序包中的文件 – 整个包是只读的。 改为在“文档”文件夹中使用path。

请参阅特殊的文件系统编程指南以获得更好的支持。
在iOS中,不能写入应用程序包中的文件 – 整个包是只读的。

考虑阅读iOS数据存储指南,以便更好地了解iCloud备份环境下目录的用途。

<APPLICATION_HOME> /AppName.app

这是包含应用程序本身的包目录。 不要写任何东西到这个目录。 为了防止篡改,bundle目录在安装时被签名。 写入这个目录会改变签名并阻止你的应用程序再次启动。


<APPLICATION_HOME> /文档/

使用此目录来存储关键的用户文档和应用程序数据文件。 关键数据是您的应用无法重新创build的任何数据,例如用户生成的内容。 这个目录的内容可以通过文件共享提供给用户。 这个目录的内容由iTunes备份。


<APPLICATION_HOME> /库/

该目录是非用户数据文件的顶级目录。 您通常会将文件放在几个标准子目录之一中,但是您也可以为要备份但不向用户公开的文件创build自定义子目录。 您不应将此目录用于用户数据文件。 这个目录的内容(除了Caches子目录之外)由iTunes备份。 有关库目录的其他信息,请参阅“库目录存储应用程序特定的文件”。

请参阅iOS标准目录中的完整列表(tmp /,文档/收件箱) :文件所在的位置

UPDATE
我使用NSFileManager方法URLForDirectory:inDomain:appropriateForURL:create:error:

像Caleb说的,你不能写入你的应用程序的目录,但你可以写入你的应用程序的Documents文件夹。 你可以这样得到它:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

你的应用程序包是只读的。 有两种方法我可以看到:

1)写入文件夹:

 NSArray *pathList = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *path = [myPathList objectAtIndex:0]; 

2)使用sqlite数据库。 这和1是一样的(你必须在文档中保存数据库),但是你使用的是sqlite数据库。 我认为这比txt和plist文件好很多: 这里是关于这个主题的教程 。

我使用下面的代码:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"set.txt"]; NSString *data=@"Kostas"; [data writeToFile:appFile atomically:YES]; NSString *myData = [NSString stringWithContentsOfFile:appFile]; NSLog(@"Data : %@ ",myData);