[英]NSFileManager Cant create file
我有这个代码。 此代码不会在文档目录中创建文件,我不知道为什么。 任何人都可以看到我错过了什么。 “数据”字典中有我需要的内容,但是当涉及到 writeToFile 时:它没有发生,因为没有创建文件。 相同的代码在我拥有的其他应用程序中也有效,我肯定遗漏了一些东西。
- (void)addBookmark{
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath: [self filePathOfBookmarks]])
{
[self filePathOfBookmarks];
}
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];
if ([fileManager fileExistsAtPath: [self filePathOfBookmarks]])
{
data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];
}
else
{
// If the file doesn’t exist, create an empty dictionary
data = [[NSMutableDictionary alloc] init];
}
NSMutableDictionary *firstOne = [NSMutableDictionary dictionary];
[firstOne setObject:@"one" forKey:@"name"];
[firstOne setObject:@"two" forKey:@"call"];
[firstOne setObject:@"twoandhalf" forKey:@"email"];
[firstOne setObject:@"four" forKey:@"description"];
[data setObject:firstOne forKey:@"ID"];
[data writeToFile: [self filePathOfBookmarks] atomically:YES];
NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];
NSLog(@"file content %@",savedStock);
}
- (NSString *) filePathOfBookmarks {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDirectory = [paths objectAtIndex:0];
return [docDirectory stringByAppendingPathComponent:@"favourites"];
}
NSLog(@"%@",[self filePathOfBookmarks]);
这返回:
/Users/spire/Library/Application Support/iPhone Simulator/5.1/Applications/40CAA37F-6477-4101-A142-D4797748ABD9/Documents/favorites
请参阅下面的代码,它在我这边工作得很好。 您刚刚在 filePathOfBookmarks 方法中提到了目录而不是确切的文件名。 我可以将数据保存在 favourites.txt 文件中。
您还可以参考以下链接以获取有关 iOS 中文件处理的更多信息
2) iPhone文件系统
- (void)addBookmark{
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath: [self filePathOfBookmarks]])
{
[self filePathOfBookmarks];
}
NSMutableDictionary *data;// = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];
if ([fileManager fileExistsAtPath: [self filePathOfBookmarks]])
{
data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];
}
else
{
// If the file doesn’t exist, create an empty dictionary
data = [[NSMutableDictionary alloc] init];
}
NSMutableDictionary *firstOne = [NSMutableDictionary dictionary];
[firstOne setObject:@"one" forKey:@"name"];
[firstOne setObject:@"two" forKey:@"call"];
[firstOne setObject:@"twoandhalf" forKey:@"email"];
[firstOne setObject:@"four" forKey:@"description"];
[data setObject:firstOne forKey:@"ID"];
[data writeToFile: [self filePathOfBookmarks] atomically:YES];
NSMutableDictionary *savedStock = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];
NSLog(@"file content %@",savedStock);
}
- (NSString *) filePathOfBookmarks {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDirectory = [paths objectAtIndex:0];
return [docDirectory stringByAppendingPathComponent:@"favourites.txt"];
}
你的一些代码没有意义(对我来说)。
这没有做任何事情:
if (![fileManager fileExistsAtPath: [self filePathOfBookmarks]])
{
[self filePathOfBookmarks];
}
然后你用你的书签文件内容初始化你的数据 object - 此时可能文件不存在:
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];
您可以简单地省略上面的两个代码块,因为您之后会再次检查它:
if ([fileManager fileExistsAtPath: [self filePathOfBookmarks]])
{
data = [[NSMutableDictionary alloc] initWithContentsOfFile: [self filePathOfBookmarks]];
}
else
{
// If the file doesn’t exist, create an empty dictionary
data = [[NSMutableDictionary alloc] init];
}
这是有道理的。 但是当您省略前两个代码块时,请确保声明数据 object:
NSMutableData *data;
然后将第一个 object 设置为数据字典。 这看起来不错(尽管使用此代码,但根本不使用之前从现有书签文件加载的数据)。
编写数据字典似乎也不错:
[data writeToFile: [self filePathOfBookmarks] atomically:YES];
当然,您的方法 filePathOfBookmarks 会返回一个有效的文件名。
然而,该方法返回一个目录,而不是一个文件。 像这样添加后缀:
return [docDirectory stringByAppendingPathComponent:@"favorites.plist"];
使用检查文件路径的有效性
NSLog(@"%@",[self filePathOfBookmarks]);
在写入文件之前。
也试试
NSLog(@"%@",data);
在编写字典之前查看字典包含的内容。
如果仍然无效,请重新发布。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.