c++ - 在 C++ 中,在文本文件开头插入一行的正确方法是什么?

标签 c++ file-io

我正在创建一个大文本文件,第一行是一个摘要,这取决于内容。我目前正在插入一个摘要行,其中包含我期望的摘要内容,在创建文件后,我将其与实际编写的内容进行比较。如果信息不同,我会覆盖初始摘要。

代码如下。

  std::ofstream ofile(filename); 
  numOutSegInSynth-=computeSegmentsFromLevel(numLevelsInSynth-1,myInitCkt);

  //extra padding inserted, to prevent summary overwriting segments
  ofile<<numNodesInSynth<<" "<<numOutSegInSynth<<"  0"<<std::endl;
  ofile.close();
  for (long i=0; i<(numLevelsInSynth-1); i++) {  
    //at all
    long numSegOnLevel = computeSegmentsFromLevel(i,myInitCkt); 
    assert(numSegOnLevel); 
    numSegsCreated+=numSegOnLevel;
    buildSegmentsList(i,numSegOnLevel,filename,myInitCkt);   
  }
  if (numSegsCreated != numOutSegInSynth) {
  //update segment count
    std::ofstream ofile(filename, ios::in | ios::out );
    ofile.seekp(0, ios::beg);
    short pred = log10(numOutSegInSynth)+1;
    short act = log10(numSegsCreated)+1;
    if (act>pred) {
      ofile<<numNodesInSynth<<" "<<numSegsCreated<<" 0"<<std::endl;
    } else {
      ofile<<numNodesInSynth<<" "<<numSegsCreated<<"  0"<<std::endl;
    }
      ofile.close();
    }

我想知道是否可以只追加到文件的开头,插入新行或单个字符 谢谢

最佳答案

正如 Ignacio 所说,大多数 文件系统不支持在文件中插入,更不用说文本文件了。 C++ 标准库的文件概念是一个简单的字节流。因此,一开始的固定大小摘要是一个实用的解决方案,因为您似乎打算使用您的代码(注意:您的代码似乎没有达到这个固定大小)。

但是,一些常见文件系统确实支持将额外信息与文件相关联。

例如,Windows NTFS 支持每个文件多个数据流:

C:\test> echo blah blah >data.txt

C:\test> type data.txt
blah blah

C:\test> echo some info >data.txt:summary

C:\test> type data.txt
blah blah

C:\test> more <data.txt:summary
some info

C:\test> _

例如,这是 Windows 资源管理器用于向文件添加摘要信息的机制。

因此,如果您正在为支持多流的系统编程,并且不打算将程序或数据移植到其他系统,您可以考虑使用多流文件。

第三种选择是通过拥有两个或更多关联文件自己有效地实现它。例如。一份数据文件,一份摘要文件。例如连接它们的命名约定。

干杯,

关于c++ - 在 C++ 中,在文本文件开头插入一行的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4179349/

相关文章:

c++ - C++写入标准输入(在Windows中)

c++ - 无法将大小 QMainWindow 设置为小于 200x100 像素

C++ 并行数组是定义的结构吗

c++ - 多线程文件读取每个线程产生相同的结果

c++ - 如何在C++中写入文件而不锁定它?

c++ - 如何在 C++ 中解析基于文本的表格

c++ - MsBuild 任务不会将 native C++ 输出放在 TargetOutputs ItemGroup 中

c++ - 找到最大的轮廓 OpenCV

php - 使用 http ://location broken 加载数据本地 infile

c - 相同的文件,相同的文件大小,但两种不同的内存大小,为什么?