C:写入文本文件中的特定行而不进行搜索

时间:2014-08-18 11:20:43

标签: c file fseek

您好,我的文件有文字:

14 
5 4
45 854
14 
4 
47 5

我需要将文本写入特定行。例如,第4行(无论我是否会附加文本或重写整行):

14 
5 4
45 854
14 new_text
4 
47 5

我找到了函数fseek()。但是在文档中写的是


fseek(文件指针,偏移量,位置);

“偏移量指定从位置指定的位置移动的位置数(字节)。”


但我不知道叮咬的次数。我只知道行数。怎么做?谢谢

2 个答案:

答案 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添加一些错误检查,读取和重新分配。