[英]Not able to write into text file
我需要将字符串写入文件。 为此,我的代码是:
-(void)writeToFile:(NSString *)fileName: (NSString *)data {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
// the path to write file
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName];
[data writeToFile:appFile atomically:YES];
}
我这样调用这个方法
ownServices *obj = [[ownServices alloc]init];
[obj writeToFile:@"iphone.txt" :@"this is mahesh babu"];
但它没有写入文本文件。
什么原因? 谁能帮帮我吗。
提前谢谢你。
最可能的问题是文档目录不存在。 如果没有,则创建它,然后写入它:
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
NSString *parentDir = [paths objectAtIndex:0];
/* Create the parent directory.
* This is expected to fail if the directory already exists. */
(void)[[NSFileManager defaultManager]
createDirectoryAtPath:parentDir
withIntermediateDirectories:YES
attributes:nil error:NULL];
NSString *path = [parentDir stringByAppendingPathComponent:fileName];
/* Now write, and if it fails, you'll know why thanks to the |error| arg. */
NSError *error = nil;
BOOL ok = [data writeToFile:path options:NSDataWritingAtomic error:&error];
if (!ok) {
NSLog(@"%s: Failed to write to %@: %@", __func__, path, error);
}
更简单的是使用最新的 API,如果它不存在,它将为您创建目录:
NSError *error = nil;
NSURL *parentURL = [[NSFileManager defaultManager]
URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask
appropriateForURL:nil create:YES error:&error];
if (!parentURL) {
NSLog(@"%s: *** Failed to get documents directory: %@", __func__, error):
return;
}
NSURL *furl = [parentURL URLByAppendingPathComponent:fileName];
error = nil;
BOOL ok = [data writeToURL:furl options:NSDataWritingAtomic error:&error];
if (!ok) {
NSLog(@"%s: *** Failed to write to %@: %@", __func__, furl, error);
}
首先,您奇怪地调用了您的方法。 将方法重命名为
-(void)writeString:(NSString *) data toFile:(NSString *)fileName
并这样称呼它:
[obj writeString:@"this is mahesh babu" toFile:@"iphone.txt"];
其次,不推荐使用 writeToFile:atomically writeToFile:atomically:
使用writeToFile:atomically:encoding:error:
:
NSError *error = nil;
BOOL success = [data writeToFile:appFile atomically:YES encoding:NSUTF8Encoding error:&error];
if (!success) {
NSLog(@"Error: %@", [error userInfo]);
}
这样,您还可以看到错误是什么。
您的代码看起来不错。 使用调试器(或NSLog
语句)来验证data
和appFile
的值。 如果data
为nil
,则不会发生任何事情(包括没有错误),因为向nil
发送消息是无操作的。 appFile
也可能不是您认为的路径。
检查您尝试写入的目录的权限( ls -la
)。 在设备上你不能,但在模拟器上你可以。 它对您来说是只读的吗? 它是否由其他用户拥有?
假设这不是问题,请尝试使用atomically:NO
调用。 原子文件写入是通过写入一个文件,然后将其重命名以替换旧文件来执行的。 如果问题存在,那将隔离问题。
OwnServices
而不是ownServices
writeToFile:string:
这样的名称会更好。data
旨在指向NSData
以外的某个实例,请不要命名它。 这很令人困惑,除了“数据”之外,您几乎可以使用一个更好(更具体)的词。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.