如何创建和写入文件而不会在clisp中覆盖仅添加

问题描述

我想使用if-exits但不知道如何添加错误 -当我尝试覆盖它会更改文件

(defun writetoFile (filename content)
  (with-open-file (stream  filename :external-format charset:iso-8859-1
                           :direction :output
                           ;if-exists :add
                           :if-does-not-exist :create )
    (format stream content)
    (terpri stream)))
(loop for i from x to y
     do (if (= (is_me i) 0)
            (format t "i = ~d ~%" i)
            (writetoFile  "/home/out.txt"
              (concatenate 'string  (write-to-string i) " is me" )))
     do (if (ime i)
            (format t "~d IS ME~%" i)
            (writetoFile  "/home/out.txt"
              (concatenate 'string  (write-to-string i) " is me" ))))

解决方法

快速解答,您需要使用:if-exists :append

Common Lisp HyperSpec关于open的说法如下:

如果存在--:error,:new-version,:rename,:rename-and-delete,:overwrite,:append,:supersede或nil中的一个。如果filespec的版本组件为:newest,则默认值为:new-version,否则为:error。

如果我们看看它对:append的看法:

:追加

流上的输出操作会破坏性地修改现有文件。文件指针最初位于文件末尾。如果direction为:io,则该文件以双向模式打开,该模式允许进行读取和写入。