在文件中间覆盖

Nee*_*asu 5 php c c++ file-io file

问题是我在文件中间使用fseekNext存在一些长度字节m,我想用长度字节替换n.simple write会保留m-n字节.如果m > n并且如果我不愿意改变的m < n某些字节(n-m)将被覆盖.

我只想startPos to endPos用可变长度字节替换已知的字节流.什么是最佳解决方案.

- 编辑 - 虽然可以通过备份来完成.有没有直接解决方案?这太乱了?和一种糟糕的编码.

o = fopen(original, 'r')
b = fopen(backup, 'w')
while(fpos(o) <= startPos){
    buffer += fgetc(o)
}
fwrite(b, buffer)
fwrite(b, replaceMentBytes)
buffer = ""
fseek(o, endPos)
while(!feof(o)){
    buffer += fgetc(o)
}
fwrite(b, buffer)
Run Code Online (Sandbox Code Playgroud)

//现在将备份复制到原始版本

Tha*_*tos 5

最强大的解决方案是从头开始重写整个文件.大多数操作系统只允许您从文件中覆盖字节,而不是插入或删除它们,因此要实现这一点,您必须复制文件,在复制期间替换目标字节.