您好,我的文件有文字:
14
5 4
45 854
14
4
47 5
我需要将文本写入特定行。例如,第4行(无论我是否会附加文本或重写整行):
14
5 4
45 854
14 new_text
4
47 5
我找到了函数fseek()。但是在文档中写的是
fseek(文件指针,偏移量,位置);
“偏移量指定从位置指定的位置移动的位置数(字节)。”
但我不知道叮咬的次数。我只知道行数。怎么做?谢谢
答案 0 :(得分:2)
你不能这样做,(文本)文件不是行可寻址的。
此外,您无法在文件中间插入数据。
最好的方法是“假脱机”到一个新文件,即逐行读取输入,并将其写入作为输出的新文件。然后,您可以轻松跟踪您所在的线路,并随心所欲。
答案 1 :(得分:1)
我将假设您将为单个文件多次执行此操作,因此您可以更好地索引每个换行符的位置,例如,您可以使用如下函数:
long *LinePosFind(int FileDes)
{
long * LinePosArr = malloc(500 * sizeof(long));
char TmpChar;
long LinesRead = 0;
long CharsRead = 0;
while(1 == read(FileDes, &TmpChar, 1))
{
if (!(LinesRead % 500)
{
LinePosArr = realloc(LinePosArr, (LinesRead + 500) * sizeof(long));
}
if (TmpChar == '\n')
{
LinePosArr[LinesRead++] = CharsRead;
}
CharsRead++;
}
return LinePosArr;
}
然后您可以保存所有换行符的索引以供重复使用。
在此之后你可以这样使用它:
long *LineIndex = LinePosFind(FileDes);
long FourthLine = LineIndex[3];
注意我没有检查过这段代码,只是从头脑中写下来所以它可能需要修复,另外,如果你在生产中使用代码,你应该为malloc添加一些错误检查,读取和重新分配。