2007年10月28日 星期日 14:04
ÎÒÒªÍù´óÎļþÀïÃæ²åÈëÎı¾¡£ ¿Ï¶¨ÄÜÓõİ취£º 1. ÖØÐÂдһ¸öÁÙʱÎļþ£¬°´ÕÕ˳ÐòÒ»±ß¶ÁÈ¡¾ÍÎļþÒ»±ß×éºÏµ½ÐµÄÎļþ¾ÍÐÐÁË¡£ 2. ¶ÁÈ¡ÎļþÄ©¶Îµ½Äڴ棬ÖмäдÈëÒª²åÈëµÄÄÚÈÝ£¬È»ºó½Ó×ŰѸղŶÁÈ¡µÄÄÚÈÝдÈë¡£ 3. ÄÚ´æÓ³Éä¡£ ÒòΪÎļþ´ó£¬ËùÒÔ²»ÍƼö2ºÍ3¡£ ÎÒ³¢ÊÔÁËÀàËÆ1µÄ·½·¨£¬²»¹ý²»Ð´ÐÂÎļþ£¬Á÷³ÌÈçÏ£º fseekµ½²åÈëµãpos_ins£¬Íùºó¶ÁÈ¡Ò»¶Î±ÈÈç buf[BUFSIZE](ÕâÀïBUFSIZE´óÓÚÒª²åÈëµÄÄÚÈÝ)£¬ È»ºóseek»Øµ½¸Õ²ÅµÄµØ·½pos_ins£¬Ð´ÈëÄÚÈÝ. È»ºófseekµ½ pos_ins+BUFLEN£¬ÔÙ¶ÁÈ¡ buf[BUFLEN]£¬ ½Óׯص½ pos_ins = ins_lenÈ¥£¬Ð´Èëbuf Èç´ËÑ»·¡£ ×ܵÄÀ´Ëµ£¬¾ÍÊÇÒ»±ß¶ÁÈ¡ºóÃæµÄ²¿·Ö£¬Ò»±ßÍùÇ°Ãæд¡£´ïµ½Éú³ÉÐÂÎļþµÄÄ¿µÄ¡££¨×îºó¿ÉÄÜÐèÒªÓÃÎļþϵͳµÄÏà¹Øµ÷ÓÃÀ´ÐÞ¸ÄÒ»ÏÂÎļþ´óС£©¡£ ÎÒ·¢ÏÖÕâÑù×ö²»ÐС£ÔÒòºÃÏñÊÇÒòΪÎÒÒ»µ©¶ÁÈ¡Ò»´ÎÒÔºó£¬ÎļþµÄÆðʼָÕëÒѾ²»ÄÜÔٻص½ÎļþÍ·ÁË£¨rewind»òÕßfseek(pos,SEEK_SET)µÄÆðʼµãÔڸղŶÁÈ¡µÄÄÚÈݺóÃ棩¡£ Îļþio¿ØÖÆÎÒÓõÄÊÇ "rw" ¡£ ÊDz»ÊÇ¿ªÒ»¸öÎļþ²»ÄÜͬʱ¶Áд£¿ -- Yours, fluke fluke在sfcube.net http://blog.ospattern.net -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20071028/6a8fddd5/attachment.html
2007年10月28日 星期日 17:40
想法是可行的。 你是在说C吗?! python的I/O模式,如果你要读又要写的话是要用 "r+"的。 我写个函数试试看。 On 10/28/07, Fluke <fluke.l at gmail.com> wrote: > > 我要往大文件里面插入文本。 > > 肯定能用的办法: > > 1. 重新写一个临时文件,按照顺序一边读取就文件一边组合到新的文件就行了。 > 2. 读取文件末段到内存,中间写入要插入的内容,然后接着把刚才读取的内容写入。 > 3. 内存映射。 > > 因为文件大,所以不推荐2和3。 > > 我尝试了类似1的方法,不过不写新文件,流程如下: > > fseek到插入点pos_ins,往后读取一段比如 buf[BUFSIZE](这里BUFSIZE大于要插入的内容), > > 然后seek回到刚才的地方pos_ins,写入内容. > > 然后fseek到 pos_ins+BUFLEN,再读取 buf[BUFLEN], > > 接着回到 pos_ins = ins_len去,写入buf > > 如此循环。 > > 总的来说,就是一边读取后面的部分,一边往前面写。达到生成新文件的目的。(最后可能需要用文件系统的相关调用来修改一下文件大小)。 > > 我发现这样做不行。原因好像是因为我一旦读取一次以后,文件的起始指针已经不能再回到文件头了(rewind或者fseek(pos,SEEK_SET)的起始点在刚才读取的内容后面)。 > 文件io控制我用的是 "rw" 。 > > 是不是开一个文件不能同时读写? > > > -- > Yours, > fluke > fluke at sfcube.net > http://blog.ospattern.net > _______________________________________________ > python-chinese > Post: send python-chinese at lists.python.cn > Subscribe: send subscribe to python-chinese-request at lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request at lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://python.cn/pipermail/python-chinese/attachments/20071028/77989ef3/attachment.html
Zeuux © 2025
京ICP备05028076号