在 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 方法

来自NSFileManagerreference:

返回值

YES如果操作成功或者项目已经存在,否则NO

来自NSStringreference:

讨论

此方法会覆盖路径中的任何现有文件。

如果您总是想写入数据的新副本,请先检查文件是否存在,如果存在则将其删除。

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 保存

ios NSFileManager 用法详解

iOS中NSFileManager文件常用操作整合

在 iCloud 中使用预先存在的 NSFileManager 代码

IOS--文件管理NSFileManager

我们如何关闭 NSFileManager?