+-
在C中,在文本文件的开头插入一行的正确方法是什么?
我正在创建一个大文本文件,第一行是摘要,它取决于内容.我目前正在插入一个摘要行,其中包含我希望摘要的内容,在创建文件后,我将其与实际编写的内容进行比较.如果信息不同,我会覆盖初始摘要.

代码如下.

  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中,在文本文件的开头插入一行的正确方法是什么? - 乐贴网