【问题标题】:Creating, reading to and writing from a plain text file in ios app在 ios 应用程序中创建、读取和写入纯文本文件
【发布时间】:2014-09-15 17:07:45
【问题描述】:

我想要做的是编写一个方法,当被调用时将创建一个带有预先编写的标题(总是相同)的纯文本文件,然后定期用更多数据更新文本文件,直到用户请求它停止。用户每次使用应用程序时都需要一个新的文本文件。

我什至一开始就很难让应用程序创建文本文件。有什么建议我可能需要做些什么来完成这个吗?

谢谢。

【问题讨论】:

  • 看看 [stackoverflow.com/questions/16872261/… 创建一个新的文本文件以写入目标 c ipad 应用程序 (Stackoverflow))
  • 我发现 Cocoa API 很难使用,所以我会恢复使用普通的 C 方法(fopen()fwrite()fprintf() 等)并保持FILE * 实例变量。应该有大量的例子来说明如何在 C 中做到这一点,这很容易翻译成 Objective-C。

标签: ios iphone ipad ios7 xcode5


【解决方案1】:

看看下面的代码,它会创建一个 CSV 文件。这正是您所需要的。如果文件不存在,它会创建一个新文件并首先写入标题,否则只需写入日志文本。

- (void)log:(NSString *)msg {

    NSString *fileName = [self logFilePath];

    // if new file the add headers
    FILE *file = fopen([fileName UTF8String], "r");
    if (file == NULL) {
        file = fopen([fileName UTF8String], "at");
        fprintf(file, "%s\n", "Date, Time, Latitude, Longitude, Speed, info");
    } else {
        fclose(file);
        file = fopen([fileName UTF8String], "at");
    }
    fprintf(file, "%s\n", [msg UTF8String]);
    fclose(file);
}

您应该在文档目录中创建文件,以下代码显示如何获取文档目录的路径

NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

【讨论】:

  • 为什么会有多个fopen() 调用?使用模式 "a+" 会做你想做的事,而模式标志 t 在 UNIX 平台下甚至不受支持。提示:使用ftell()查看文件当前是否为空,是否需要写入头部。
  • 这看起来确实像我需要使用的那种东西。但是,如果我调用该方法来最初创建文件,然后定期更新它,那么当用户下次使用该应用程序时,我怎样才能获得一个唯一的文件?我也不确定如何使用目录
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多