You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C/C++ CSV文件断点续写:不同代码段分写字段与行实现方法

问题解答

该需求完全可实现,你调用fseek未生效的核心原因是文件打开模式使用错误。

你现有代码中使用fopen("xxx.csv", "w+")打开文件,w系列的打开模式只要执行就会直接清空文件原有全部内容,哪怕后续调用fseek定位到文件末尾,原有内容已经被删除,自然无法实现追加效果。


正确实现方案

C语言版本

要实现追加写入,直接使用**追加模式a/a+**打开文件即可,无需额外调用fseek,系统会自动将写入内容追加到文件末尾:

  • a:仅支持写入,文件不存在则自动创建,写入内容自动追加到末尾
  • a+:支持读+追加写入,其余特性和a一致

修正后示例代码如下:

#include <stdlib.h>
#include <stdio.h>

//function declaration
int fonit(int count);

int main(int argc, char const *argv[])
{
    int a=100;
    int b=a/10;
    // 首次创建文件用w模式清空旧内容,后续追加都用a模式
    FILE *init_file = fopen("fant.csv", "w");
    fclose(init_file);
    init_file = fopen("ant.csv", "w");
    fclose(init_file);
    
    for (int a = 0; a < 10; a++)
    {   
        // 写入fant.csv,用a模式追加
        FILE *file = fopen("fant.csv", "a");
        fprintf(file, "%d,", a);
        fclose(file); 
            
        for (int j = 0; j < 10; j++){
            fonit(j);
        }
        
        // 写入ant.csv行尾内容
        file = fopen("ant.csv", "a");
        fprintf(file, "%d,\n", b);
        fclose(file);
    }
    return 0;
}

int fonit(int count){
    int k=0;
    for (int i = 0; i < count; i++)
    {
        for (int j = 0; j < 100; j++)
        {
            k=j%2;
        }
        // 追加写入ant.csv
        FILE *file = fopen("ant.csv", "a");
        fprintf(file, "%d,", k);
        fclose(file);
    }
    return 0;
}

优化建议:如果写入操作比较频繁,建议全程保持文件句柄打开状态,不需要每次写入都开闭文件,能大幅提升写入性能。

C++版本

C++中使用文件流操作时,添加ios::app打开标记即可实现追加写入,示例代码如下:

#include <fstream>
#include <string>

int main() {
    // 打开文件时指定ios::app标记,写入自动追加到末尾
    std::ofstream out("ant.csv", std::ios::app);
    if (out.is_open()) {
        // 直接写入即可,自动追加到文件末尾
        out << "列1,列2,列3\n";
        out << 1 << "," << 2 << "," << 3 << "\n";
        out.close();
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Zubeyir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 03:36:04