为什么BASIC将0x1a附加到文件的末尾?

Why does BASIC append 0x1a to the end of a file?

我正试图通过零调制解调器串行电缆将文件传输到旧PCJR。我拼凑了一个快速的基本脚本,从串行端口读取数据并将其写入文件,但我发现我保存的每个文件末尾都有一个额外的字节0x1A。

这似乎是由CLOSE语句引起的,因为即使OPENing和CLOSEing文件没有写入任何内容,也会产生一个单字节文件。

我不希望在我的文件末尾有子字符,尤其是二进制字符!是否有另一种方式来写入阻止此行为的文件?

(在lubuntu虚拟机中使用优秀的"pc-basic"进行演示,但这在所有basic变体中似乎都是一件"事情")。

1
2
3
4
5
6
7
8
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.


也许这可以帮助:

批处理脚本,用于合并结尾不带十六进制字符1a的文件

本文讨论了DOS如何使用EOF指示器处理复制数据,以及标志如何工作。你能用指示的开关批量复制这些文件吗?

按问题编辑作者:是的,就是这样。需要的特定命令是copy src.bin /a dest.bin /b。这会从文件的末尾剥离出EOF字节。这在DOS 2.10中甚至得到了支持!在使用我的基本程序保存文件之后,我不得不运行这个额外的步骤,这让我很恼火,但它可以完成任务。


函数将字符串写入数据输出文件,但不带尾随的EOF字符:

1
2
3
4
5
6
OPEN"B", #1,"TEST.TXT"
X$ ="hello world"
FOR X = 1 TO LEN(X$)
    Z$ = MID$(X$, X, 1)
    PUT #1, X, Z$
NEXT