+-

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