如何在文件夹中保存文件?

时间:2012-06-15 15:33:57

标签: iphone nsfilemanager nsdocumentdirectory

我正在尝试将数据保存在iPhone 5.1模拟器上的文档文件夹中。

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"myData.json"];

if ([[NSFileManager defaultManager] isWritableFileAtPath:filePath]) {
    NSLog(@"Writable");
}else {
    NSLog(@"Not Writable");
}

我总是“不可写”。 任何的想法?请帮帮我。

4 个答案:

答案 0 :(得分:19)

可能因为您尚未创建文件,您测试的文件不存在。 :)

你可以这样做来发现问题,

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"myData.json"];
NSLog(@"filePath %@", filePath);

if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) { // if file is not exist, create it.
    NSString *helloStr = @"hello world";
    NSError *error;
    [helloStr writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
}

if ([[NSFileManager defaultManager] isWritableFileAtPath:filePath]) {
    NSLog(@"Writable");
}else {
    NSLog(@"Not Writable");
}

答案 1 :(得分:5)

试试这个:

NSString *data = .... // your json representation
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"myData.json"];
[data writeToFile:appFile atomically:YES encoding:NSUTF8StringEncoding error:nil];

答案 2 :(得分:3)

将[{1}}换成[NSString stringWithFormat:]。这会影响你创造可行路径的能力,或者说我的经验教会了我。

此外,在模拟器和真实设备上书写时会出现这种情况。当你在错误的路径中保存东西时,模拟器会比设备更宽容,而且通常你会让I / O正常工作,只会遇到臭名昭着的“它在模拟器中工作!”坑。 [NSString stringByAppendingPathComponent:]只是一种落入的方式。

答案 3 :(得分:1)

获取文档目录路径

code <- function(x,y)
{
y[x<=8]<-3
y[x>=9 & x<=11]<-1 
y[x>= 12 &x<=20]<-0
y[x>=21 &x<=24]<-2
y[x>=25]<-3}

将数据写入文件末尾

+(NSURL *)getDocumentsDirectoryPath
{
    return [[[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask]lastObject];
}