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