Gforth 0.7.3保存函数修改:支持新文件与已有文件保存
Gforth 0.7.3 保存功能扩展:支持新文件与已有文件保存
当前代码仅能保存至已存在的文件,无法创建新文件并保存。问题核心在于文件打开模式的选择——原代码使用的w/o模式仅支持覆盖已有文件,不会主动创建新文件。以下是修改后的完整实现:
27 constant ESC \ 控制终端颜色转义序列 0 value handle : 2>str ( n1 n2 -- cadr u) s>d <# #s bl hold 2drop s>d #s #> ; : wr ( cadr n -- ) handle write-line throw ; : wr-slot { x y } x y sarray count ?dup if x y 2>str wr wr else drop then ; : COLORIZE ESC EMIT ." [" base @ >R 0 <# #S #> type R> base ! ." m" ; \ ASCII终端颜色控制 : getfname ( -- cadr n) type pad 64 accept pad swap ; : save 31 colorize s" Save to file: " getfname w/o create open-file \ 修改:替换为支持创建新文件的打开模式 ?dup if nip 33 colorize s" Failed to open file." 0 colorize cr exit else to handle then ['] wr-array catch if 33 colorize s" Error while writing to file." 0 colorize cr handle close throw \ 出错时确保关闭文件,避免资源泄漏 error then handle close throw ;
关键修改说明
- 文件打开模式调整:将
w/o替换为w/o create,该模式在Gforth 0.7.3中的行为是:- 文件不存在时自动创建新文件
- 文件已存在时覆盖原有内容
- 保持只写权限,完全匹配保存操作的需求
- 错误处理优化:
- 区分文件打开失败与写入失败的提示信息
- 写入出错时先关闭文件再抛出错误,避免资源泄漏
- 移除原代码中冗余的逻辑分支,简化执行流程
内容的提问来源于stack exchange,提问作者francois P
相关产品推荐
相关产品推荐

