使用 fopen() 的最佳方法是什么
What is the best way to use fopen()
我正在实习,我正在研究SLAM模拟项目,在将云点写入文件时遇到了一点问题。
这是我的代码,我有两个函数:
void ecriture_fichier(double x, double y){
FILE *fichier = NULL;
fichier = fopen("/home/stagiairepierrick/points/points.txt", "a");
if(fichier != NULL ){
fprintf(fichier, "%lf %lf n",x,y);
} else {
std::cerr << "probleme ecriture" << std::endl;
}
fclose(fichier);
}
void ajout_nombre_lignes(long nombre_lignes){
FILE *fichier = NULL;
fichier = fopen("/home/stagiairepierrick/points/points.txt", "r+");
if(fichier != NULL ){
fseek(fichier, 0, SEEK_SET);
fprintf(fichier, "%ld n", nombre_lignes);
} else {
std::cerr << "probleme ecriture nombre de lignes" << std::endl;
}
fclose(fichier);
}
函数 ajout_nombre_ligne
在 ecriture_fichier
之前调用。我希望第一个 lign 是 ligne 的数量(变量 nombre_lignes
(,但是当我执行此代码时,我的文件中得到以下结果:
8070
00000 5.200000
5.200000 5.200000
5.200000 5.200000
5.200000 5.200000
5.200000 5.200000
5.200000 5.200000
对于我第一行添加的每个字符,我可以看到我的第二行的一个字符正在被删除,我明白为什么,但我找不到任何解决方案。
你们能帮我吗?
行为没有错。
如果你写一个字符中间文件或不在末尾的某个地方,你会覆盖该位置的任何内容。
如果要写入末尾(追加(以外的其他位置,则必须读取和写入未修改的文件部分。
此外,您可能希望改用std::ifstream
/std::ofstream
/std::fstream
。
fseek主要用于在二进制文件中搜索 - C/C++中没有基于行的文件。
我知道您想附加一行,然后根据行总数更新第一行 - 我能看到的唯一可能性是使用空格/零来填充行数以确保它始终是相同的长度,即:
fprintf(fichier, "%10ld n", nombre_lignes);
我不确定所需的行为是否标准化。
相关文章:
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 在C++中向零方向近似的最佳方法
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 检测win32服务创建和删除的最佳方法
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 将线程中的数据存储到全局容器的最佳方法?
- 将一系列整数放入类的最佳方法是什么?
- 在派生类中使用基类的私有成员变量的最佳方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- 比较两个节点坐标的最佳方法是什么?
- 在nodejs中使用本机代码的最佳方法是什么?
- 将 pybind11 绑定标记为已弃用的最佳方法
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?