Проблема в том, что вы открыли файл в текстовом режиме, а не в двоичном, поэтому ввод останавливается на первом символе ^Z
(который является официальным символом EOF текста ASCII; это на самом деле полезно в некоторых случаях). дела, правда, не в твоем). Поскольку вы читаете двоичные данные, вы должны открыть их как таковые, передав флаг b
open mode:
set fh [open $file rb]
Если вы используете более старую версию Tcl, вы вместо этого (и эквивалентно) делаете:
set fh [open $file r]
fconfigure $fh -translation binary
Флаг b
- это просто (очень) удобный ярлык. (Второй способ работает на всех версиях Tcl, начиная с 8.0; раньше вы вообще не хотели обрабатывать двоичные данные в Tcl.)