我是IOS编程的新手。我想把一些数据写入文件。我在Document path中成功打开了该文件。但是它不能按预期工作。如果我打开它的文件为空。它是我正在使用的代码。我做错了什么。
typedef struct test {
int a;
} TEST_OBJ;
TEST_OBJ test_obj1;
test_obj1.a = 5;
TEST_OBJ *data_ptr = &test_obj1;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"MyFile1.txt"];
//This is working fine.
// [data writeToFile:appFile atomically:YES];
NSFileManager *fileManager = [[NSFileManager alloc]init];
char const *path = [fileManager fileSystemRepresentationWithPath:appFile];
FILE *fp = fopen(path, "w+b");
// This write is not working. File is empty.
int cnt = fwrite (data_ptr , 1 , sizeof(test_obj1) , fp );
fclose(fp);
fp = NULL;
任何人都会告诉我我做错了什么?
答案 0 :(得分:3)
我建议您使用NSData
而不是C函数。
NSData *myData = [[NSData alloc] initWithBytes:bytes length:length];
[myData writeToFile:path atomically:YES];
答案 1 :(得分:3)
你可以使用NSData,NSArray,NSDictionary,它们有[writeToFile:atomically:]方法,它可以将数据写入文件。
如果您必须使用C来读写文件流,可以使用下面的方法,它可以将arrayString添加到文件中。
- (void)putArrayString:(NSString *)arrayString toFilePath:(NSString *)filePath
{
FILE *fileStream = fopen([filePath UTF8String], "a+");
if(fileStream == NULL)
{
fclose(fileStream);
fileStream = fopen([filePath UTF8String], "w+");
fputs([arrayString UTF8String], fileStream);
}
else
{
fputs([arrayString UTF8String], fileStream);
}
fclose(fileStream);
}
答案 2 :(得分:0)
我现在已经改变了打开+正确写作和阅读的模式。谢谢大家的帮助。
答案 3 :(得分:-1)
看看你是否可以使用这段代码:
https://github.com/RIKSOF/three20/blob/master/src/extThree20RemoteObject/Source/TTObjectModel.m
从encodeToDocument方法开始阅读。它将对象的所有属性写入JSON或XML文件。
此类的任何具有任何属性的子类都已正确写回。