在某个位置使用fwrite()而不覆盖内容

时间:2016-09-08 13:34:40

标签: php

编辑:对于寻找答案的其他人,我使用了this。可能是解决问题的最快方法。

假设我有一个非常test.txt文件,其中包含:

line1
line4
line5
line6

我希望在line1之后添加line2和line3。我使用以下代码来实现此目的:

$file = fopen('test.txt', 'r+');
fseek($file, 5);
fwrite($file, "\r\nline2\r\nline3\r\n");

但是,txt文件现在变为,line4和line5被覆盖:

line1
line2
line3
line6

我在c+中使用fopen模式获得了相同的结果。我无法使用aa+,因为他们只是将内容附加到文件的末尾。我也无法将整个文件读成字符串并对其进行分析以进行更改,因为此文件非常庞大。

有什么方法可以解决这个问题?

注意:由于文件中包含大量内容,任何涉及将整个文件作为字符串读取然后从那里进行更改的解决方案都是不可行的。如果有任何厚颜无耻的变通办法将内容添加到第一行和第二行之间的几行,那就足够了。 :d

2 个答案:

答案 0 :(得分:1)

可悲的是,var startTime = moment().unix(); var endTime = moment().add(1,'h').unix(); getTimeSheet(startTime,endTime); var getTimeSheet = function(st, et) { console.log(arguments); var timeSheet = []; var duration = moment.duration({'minutes' : 10}); var ct = st; console.log(ct); while (ct <= et ){ var n10 = moment.unix(st).add(duration).unix(); timeSheet.push(n10); console.log(n10); ct = n10; } console.log(timeSheet); }; 和朋友不允许插入,只是追加。从他们的角度来看,该文件是一个可扩展的大型数组。因此,没有调用插入数据,只有覆盖。

但是,您可以通过多种方式解决这个问题。一种简单的方法是从原始文件中将fopena第1行打开一个临时文件,附加第2行和第3行,然后将原始文件的其余部分写入临时文件,大块一旦你传输了整个文件(没有立即将整个文件加载到内存中,请注意),然后你可以将临时文件移到原始文件的顶部。

答案 1 :(得分:0)

您可以通过从每一行创建一个数组来完成此操作。然后用你想要的任何东西替换搜索到的行。

dict ["George", 10; "Peter", 5; "Jimmy", 9; "John", 2]
|> Seq.map (|KeyValue|)
|> Seq.sortBy fst
|> Seq.iter (fun (k,v) -> ())