File 将字符串附加到IronScheme中的现有文本文件

File 将字符串附加到IronScheme中的现有文本文件,file,scheme,append,r6rs,ironscheme,File,Scheme,Append,R6rs,Ironscheme,我们正在尝试使用IronScheme构建一个日志文件,并使用racket为其编写了代码。它在球拍中运行良好,但IronScheme抛出了一个错误。这就是我们目前的情况: (define write-to-log (lambda(whatToWrite) (with-output-to-file "robot-log.txt" (lambda () (printf (string-append whatToWrite "\r\n" ))) #:exists 'append))) 请参见在与文件输

我们正在尝试使用IronScheme构建一个日志文件,并使用racket为其编写了代码。它在球拍中运行良好,但IronScheme抛出了一个错误。这就是我们目前的情况:

(define write-to-log
(lambda(whatToWrite)
(with-output-to-file "robot-log.txt"
(lambda () (printf (string-append whatToWrite "\r\n" ))) #:exists 'append)))
请参见在与文件输出一起使用时如何使用“exists”可选参数。我们不确定如何使此可选参数与IronScheme一起工作。有没有什么方法可以让它发挥作用,或者其他方法


请注意,我们希望在现有的.txt文件中附加一个字符串。如果不使用可选参数,则会抛出一个错误,说明文件已存在

据我所知,IronScheme是基于R5R的。从:

对于输出到文件的
,如果文件已存在,则效果未指定

所以抛出一个错误肯定是符合规范的,不应该期望Racket代码的可移植性

警告:这段代码是在不同的R5RS实现上运行的,而不是IronScheme

如果您只想附加到R5RS中的现有文件:

(define my-file (open-output-file "robotlog.txt"))
(display (string-append what-to-write "\r\n") my-file)
(close-output-port my-file)
是一种简单的方法,可以让您接近您想要的内容。

IronScheme支持R6RS:)

文件选项
在输出到文件的
上不可用,因此您需要使用
打开文件输出端口

示例(不正确):

更新:

上述操作将不起作用。看来您可能在IronScheme中发现了一个bug。但是,从R6RS来看,还不清楚哪些
文件选项应该像append一样运行(如果有的话)。我将进一步调查并提供反馈

更新2:

我已经和R6RS的一个编辑器谈过了,它似乎没有指定“附加模式”的可移植方式。当然,我们在.NET中提供了这一功能,因此我将通过添加另一个用于附加的
文件选项来解决此问题。我还将考虑为“简单io”过程添加一些重载来处理此问题,因为使用上述代码相当繁琐。谢谢你发现了这个问题

更新3:

我已经谈到了这个问题。从TFS版本114008开始,
追加
已添加到
文件选项
。另外,
输出到文件
调用输出文件
打开输出文件
还有一个额外的可选参数来指示“追加模式”。您可以从获取最新版本

例如:

(with-output-to-file "test.txt" (lambda () (displayln "world")) #t)

它会抛出什么错误?算术不匹配。“exists”参数并不奇怪,因为Scheme标准没有为输出到文件的
指定任何关键字参数。谢谢您的回答!不幸的是,这段代码总是试图创建一个新文件,如果该文件存在,就会抛出一个错误。(i/o-file-ready-exists)@Robert如果我的示例代码对现有文件抛出错误,那么问题可能只是铁方案的非标准性质。谢谢你的回答!从那时起,我们找到了一个解决办法,现在我们覆盖所有内容,并在阅读时以不同的方式进行处理。@Robert:仍在调查中。上面的代码是错误的。哇!谢谢你这么快就解决了这个问题:)@Robert:我努力在24小时内给予支持:D
(with-output-to-file "test.txt" (lambda () (displayln "world")) #t)