1

我是IOS编程的新手。我想将一些数据写入文件。我已成功打开文档路径中的文件。但是 fwrite 它没有按预期工作。如果我打开文件它是空的。它是我正在使用的代码。我做错了什么。

 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;

任何人请告诉我我做错了什么?

4

4 回答 4

3

我建议您使用NSData而不是 C 函数。

NSData *myData = [[NSData alloc] initWithBytes:bytes length:length];
[myData writeToFile:path atomically:YES];
于 2012-07-26T09:52:05.450 回答
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);
}
于 2012-07-26T11:24:16.893 回答
0

我现在已经改变了打开a+它的写作和阅读的模式。感谢你的帮助。

于 2012-07-26T15:33:53.440 回答
-1

看看你是否可以使用这个代码:

https://github.com/RIKSOF/three20/blob/master/src/extThree20RemoteObject/Source/TTObjectModel.m

从 encodeToDocument 方法开始读取。它将对象的所有属性写入 JSON 或 XML 文件。

此类具有任何属性的任何子类都被正确写回。

于 2012-07-26T10:14:20.590 回答