我的代码有问题,我无法使用二进制端口保存换行符,我想为我的方案实现编写单元测试,但我无法找出为什么我在Gambit和Kawa中也得到了这个结果(由于缺少过程,Gauche和Guile无法运行代码)。
(let ((fname "./tests/__x7__.scm")
(str "hello, world!\n"))
(if (file-exists? fname)
(delete-file fname))
(let ((port (open-binary-output-file fname)))
(call-with-port port
(lambda (p)
(write-bytevector (string->utf8 str) p)))
(define output (with-input-from-file fname
(lambda ()
(let ((result (list)))
(do ((char (read-char) (read-char)))
((eof-object? (peek-char))
(apply string result))
(set! result (append result (list char))))))))
(write output)
(newline)))
我正在将换行符写入文件,但在输出文件的末尾没有换行符,当我读取文件时,我得到了换行符
"hello world"
而不是
"hello world\n"
.
“你好,世界”
没有新线。
如果字符串是
"hello, world!\nfoo bar"
换行符保存正确,为什么不保存尾随的换行符?