我正在创建一个大文本文件,第一行是摘要,它取决于内容.我目前正在插入一个摘要行,其中包含我希望摘要的内容,在创建文件后,我将其与实际编写的内容进行比较.如果信息不同,我会覆盖初始摘要.
代码如下.
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,file-io 来源: https://codeday.me/bug/20190927/1824484.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。