在 iOS 中使用 NSFileManager 写入文件
Posted
技术标签:
【中文标题】在 iOS 中使用 NSFileManager 写入文件【英文标题】:Writing file with NSFileManager in iOS 【发布时间】:2014-11-26 16:24:27 【问题描述】:(我的母语不是英语。抱歉我的英语不好......)
我之前用这段代码成功写过文件。
// worked code...
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingString:@"myfile.txt"];
NSString *myStr = @"this is a string";
if( ! [myStr writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:NULL] )
return FALSE;
else
return TRUE;
现在我想用NSFileManager
更改此代码。
所以,我就这样尝试了。
// not worked code...
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingString:@"myfile.txt"];
NSString *myStr = @"this is a string";
NSData *fileData = [myStr dataUsingEncoding: NSUTF8StringEncoding];
NSFileManager *fm;
if( [fm createFileAtPath: filePath contents: fileData attributes: nil] == NO )
return FALSE;
else
return TRUE;
每当我构建此代码时,它都会返回为 false... 难道我做错了什么??请帮帮我
【问题讨论】:
您能记录下filePath
的值吗?通常使用– stringByAppendingString:
将路径组件 添加到当前URL 是一种不好的做法。
感谢您的评论。这是我的道路。 /Users/[myUserName]/Library/Application Support/iPhone Simulator/7.0.3/Applications/08F89652-CA57-4136-9889-46458D00AC9A/Documentsmyfile.txt
并且在使用stringByAppendingString
之后,它变成了Documents/myfile.txt
。但是,即使我检查了文件是否存在,它仍然无法写入。
我解决了这个问题。谢谢
【参考方案1】:
区别基本上是NSFileManager
方法不会覆盖现有文件,而NSString
方法将:
来自NSFileManager
reference:
返回值
YES
如果操作成功或者项目已经存在,否则NO
。
来自NSString
reference:
讨论
此方法会覆盖路径中的任何现有文件。
如果您总是想写入数据的新副本,请先检查文件是否存在,如果存在则将其删除。
ALSO:您不应该使用[NSString stringByAppendingString:]
来构造文件路径;改为使用[NSString stringByAppendingPathComponent:]
;因此,我希望您甚至没有编写您认为的文件。
更好的是,使用NSURL
来引用文件;这是首选方法。
【讨论】:
感谢您的建议。正如你所说,我使用了[NSString stringByAppendingPathComponent:]
。 filePath
的日志看起来不错。我检查了文件是否存在([NSFileManager fileExistsAtPath
)。如果是这样,我将其删除([NSFileManager removeItemAtPath]
)。但是,即使没有文件,它也无法写入......
别介意我说的。有效。我忘了写NSFileManager *fm = [NSFileManager defaultManager];
【参考方案2】:
您的 NSFileManager 未设置为任何文件管理器。
您应该尝试使用以下代码使用 defaultManager 对其进行初始化。
NSFileManager *fm = [NSFileManager defaultManager];
【讨论】:
...为什么我忘了这个?对不起以上是关于在 iOS 中使用 NSFileManager 写入文件的主要内容,如果未能解决你的问题,请参考以下文章
Xcode iOS 生成 .png 文件并使用 NSFileManager 保存