Я работаю над устаревшим программным обеспечением, написанным на Delphi 7, которое работает на Windows. Я уменьшил проблему до следующей программы:
var f: text;
begin
assign(f, 'a.txt');
rewrite(f);
writeln(f, 'before' + chr(14) + 'after');
close(f);
assign(f, 'a.txt');
append(f);
close(f);
end.
Я ожидаю, что он создаст файл a.txt
, содержащий "before#14after#13#10"
, а затем ничего к нему не добавит. Однако после запуска этой программы на Windows вместо a.txt
я вижу before
, как если бы Delphi s append
усекает файл. Если я не открываю файл заново, он показывает before#14after#13#10
, как и ожидалось.
Если я что-то записываю (FooBar
) в повторно открытый файл, он добавляется, но, как будто файл уже был усечено: beforeFooBar
.
Этот эффект не возникает с любым другим символом от 0 до 32, даже с 26 (что означает EOF).
Это ошибка в Delphi или четко определенное поведение? Что такого особенного в chr(14)
?