用写入文件失败
我正在尝试从一个文件中提取内容并将其写入另一个文件。 我正在阅读,但我无法将其写入另一个文件。
我有一个单词数据库。 我想根据字母数字将这些单词分成不同的文件。 所有四个字母单词都归入一个文件,依此类推。 我在我的资源中添加了一个名为“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);