首页 > 解决方案 > 如何写入文件?

问题描述

我有点陷入将内容写入文件的看似简单的问题。

有一个函数声明为void decode_log(uint8_t *data, uint32_t len)在调试终端中打印一些信息,如下所示:

#define LOG_HEADER_LENGTH (16)
#define LOG_ENTRY_LENGTH (16)

static void decode_log(uint8_t *data, uint32_t len)
{
    if(len<LOG_HEADER_LENGTH)
    {
        DEBUG_Print("Log header missing!\n");
    }
    else
    {
        DEBUG_Print("\n=== USAGE_LOG ===\n"
            "Power cycles: %u\n"
            "Unpause events: %u\n"
            "Power-on time: %us\n"
            "Unpaused time: %us\n",
            get_uint32(data+0),
            get_uint32(data+4),
            get_uint32(data+8),
            get_uint32(data+12));
    }
    data+=LOG_HEADER_LENGTH;
    len-=LOG_HEADER_LENGTH;

    if(!len)
    {
        DEBUG_Print("No phase entries\n");
        return;
    }

    DEBUG_Print("Phase\tcount\tmin ms\tmax ms\ttotal ms\n");
    int phase_num=0;
    while(len>=LOG_ENTRY_LENGTH)
    {
        DEBUG_Print("%u\t%u\t%u\t%u\t%u\n", phase_num,
            get_uint32(data+0),
            get_uint32(data+4),
            get_uint32(data+8),
            get_uint32(data+12));
        phase_num++;
        data+=LOG_ENTRY_LENGTH;
        len-=LOG_ENTRY_LENGTH;
    }
    if(len)
    {
        DEBUG_Print("Incomplete entry for phase %d\n", phase_num);
    }

}

DEBUG_Print上面简单地使用并printf定义为:

#define DEBUG_Print(...) do{printf(__VA_ARGS__); fflush(stdout); }while(0)

上面的代码截断解码data并将其打印到调试终端中。

现在我想将相同的信息保存到文件中。你能告诉我在哪里以及如何定义、打开和将内容写入文件吗?

标签: cfile

解决方案


// Declare a file pointer
FILE *file = NULL;

// Open the file for writing
file = fopen("filename.log", "w");
if(file == NULL)
{
    printf("Error: Cannot open file.\n");
    return;
}

// Write to file
fprintf(file, "\n=== USAGE_LOG ===\n");
...

// Always close the file if you don't need it anymore
// This also flushes the content as soon as possible
fclose(file);

另外,请注意文件的内容在打开后立即清空。如果您不想这样做,请使用file = fopen("filename.log", "a");将新日志添加到文件中。


推荐阅读