我正在尝试在已经包含某些内容的文件中的特定位置写入文本。写完之后我发现文件被截断为文本大小加上fseek位置和第一个值为0的字符。这是正常行为还是我错过了什么?我想提一下,我正试图避免将文件加载到内存中并将其写回。
$file = fopen("text.txt","w");
fseek($file,3);
fwrite($file,"Hello");
fclose($file);
答案 0 :(得分:4)
您需要以c
模式打开文件,否则会在fopen
上截断:
$file = fopen("text.txt","c");
有关所有文件打开模式的文档以及它们的具体用途,请参阅http://php.net/manual/de/function.fopen.php。另请参阅http://www.php.net/manual/en/function.fseek.php手册
答案 1 :(得分:0)
是的,这是正常行为:
将文件指针放在文件的开头,将文件截断为零长度。
一般情况下,允许搜索文件结尾;如果随后写入数据,则读取文件结尾和搜索位置之间的任何未写入区域将产生值为0 的字节。 [..] 如果以附加(a或+)模式打开文件,则无论文件位置如何,都会追加写入文件的任何数据,并且调用fseek()的结果将是未定义的。
您可能希望以非截断写入模式打开文件(例如“c”但不是“a”)。