为什么 BASIC 将 0x1a 附加到文件末尾?
Why does BASIC append 0x1a to the end of a file?
我正在尝试通过零调制解调器串行电缆将文件传输到旧的 PCjr。我拼凑了一个快速的 BASIC 脚本来从串行端口读取数据并将其写入文件,但我发现我保存的每个文件最后都有一个额外的字节 0x1a。
这似乎是由 CLOSE
语句引起的,因为即使 OPEN
ing 和 CLOSE
ing 一个文件而不写入任何内容也会导致一个单字节文件。
我不想在文件末尾使用 SUB 字符,尤其是二进制文件!是否有另一种写入文件的方法可以防止这种行为?
(在 Lubuntu VM 中使用优秀的 "PC-BASIC" 进行演示,但这似乎是 BASIC 所有变体中的 "thing")
josh2112@jf334-lubuntu-vm:~$ pcbasic -b
PC-BASIC 2.0.0
(C) Copyright 2013--2018 Rob Hagemans.
60300 Bytes free
Ok
OPEN "O",#1,"TEST.TXT":PRINT#1,"hello world";:CLOSE:SYSTEM
josh2112@jf334-lubuntu-vm:~$ xxd TEST.TXT
00000000: 6865 6c6c 6f20 776f 726c 641a hello world.
也许这可以帮助:
Batch script to merge files without Hex char 1A at the end
post 讨论了 DOS 如何使用 EOF 指示器处理复制数据以及标志如何工作。您可以使用指示的开关批量复制文件吗?
问题作者编辑:是的,就是这样。需要的具体命令是
copy src.bin /a dest.bin /b
。这从文件末尾剥离了 EOF 字节。这甚至在 DOS 2.10 中得到支持!烦人的是,在使用我的 BASIC 程序保存文件后,我必须 运行 这个额外的步骤,但它完成了工作。
将字符串写入数据输出文件且不带尾随 eof 字符的函数:
OPEN "B", #1, "TEST.TXT"
X$ = "hello world"
FOR X = 1 TO LEN(X$)
Z$ = MID$(X$, X, 1)
PUT #1, X, Z$
NEXT
我正在尝试通过零调制解调器串行电缆将文件传输到旧的 PCjr。我拼凑了一个快速的 BASIC 脚本来从串行端口读取数据并将其写入文件,但我发现我保存的每个文件最后都有一个额外的字节 0x1a。
这似乎是由 CLOSE
语句引起的,因为即使 OPEN
ing 和 CLOSE
ing 一个文件而不写入任何内容也会导致一个单字节文件。
我不想在文件末尾使用 SUB 字符,尤其是二进制文件!是否有另一种写入文件的方法可以防止这种行为?
(在 Lubuntu VM 中使用优秀的 "PC-BASIC" 进行演示,但这似乎是 BASIC 所有变体中的 "thing")
josh2112@jf334-lubuntu-vm:~$ pcbasic -b
PC-BASIC 2.0.0
(C) Copyright 2013--2018 Rob Hagemans.
60300 Bytes free
Ok
OPEN "O",#1,"TEST.TXT":PRINT#1,"hello world";:CLOSE:SYSTEM
josh2112@jf334-lubuntu-vm:~$ xxd TEST.TXT
00000000: 6865 6c6c 6f20 776f 726c 641a hello world.
也许这可以帮助:
Batch script to merge files without Hex char 1A at the end
post 讨论了 DOS 如何使用 EOF 指示器处理复制数据以及标志如何工作。您可以使用指示的开关批量复制文件吗?
问题作者编辑:是的,就是这样。需要的具体命令是
copy src.bin /a dest.bin /b
。这从文件末尾剥离了 EOF 字节。这甚至在 DOS 2.10 中得到支持!烦人的是,在使用我的 BASIC 程序保存文件后,我必须 运行 这个额外的步骤,但它完成了工作。
将字符串写入数据输出文件且不带尾随 eof 字符的函数:
OPEN "B", #1, "TEST.TXT"
X$ = "hello world"
FOR X = 1 TO LEN(X$)
Z$ = MID$(X$, X, 1)
PUT #1, X, Z$
NEXT