由“向文件头部插入一句话”引发的思考和尝试

    首先,同学想在文件的头部插入一句话而不影响后面的文件内容,众所周知,当用fopen()函数时,打开方式参数如果是w,那么就会抹掉文件原有文件的内容,我尝试了使用a模式打开文件,然后使用rewind()函数试图将指针回滚到指向文件流的头部,但是结果只是回到了进入文件时文件流指针所在的位置,之后又尝试了fseek(文件流指针,0,SEEK_SET)这种方式,目的同上,可是,效果也同rewind()。
    那么,这样说来就是此路不通了。为了实现标题中的功能我采用了先将文件内容读出来存到一个临时文件里,再以w模式打开原文件,写入想要插入的内容。然后再将临时文件中的内容以a模式续写到原文件中,这样就实现了在文件首部插入的目标。
    有两种方案可供选择:1.将文件一个字节一个字节逐一读出写到临时文件及回写。
                                2.将文件整体读出或以固定大小的block为单位读出及回写。
    方案一可节省内存空间,而方案二比较节省时间,又回到了时间与空间的对立统一性的命题上面来了。如何抉择就根据具体情况酌情考虑了。我将两种方案都代码实现了一下,值得一提的是统计文件长度时可以通过:
                             fseek(文件流指针,0,SEEK_SET);
                             size_t  FileSize=ftell(文件流指针);
                             fseek(文件流指针,0,SEEK_END);
    来实现。顺便提一下,在linux下统计程序执行时间和运行该程序的CPU使用情况可以用:TIMEFORMAT=“” time ./xxx(xxx为程序名),来测试。

你可能感兴趣的:(文件)