2016-07-18 2 views
-2

아니지만, 나는 오류 "파일 스트림 아니다"점점 계속 :CLISP 오류 : 공주 역 : 인수는 내가 커먼 리스프에서 파일에 쓰기를 시도하고 스트림

[1]> (open "file.txt" :direction :output :if-does-not-exist :create :if-exists :supersede) 
#<output buffered file-stream character #P"file.txt"> 
[2]> (princ 'Hello "file.txt") 

*** - princ: argument "file.txt" is not a stream 

심지어를 시도 파일을 닫으면 오류가 반환됩니다.

파일이 제대로 만들어 졌으므로 권한 문제 일 수 있다고 생각하지만 그럴 것 같지 않습니다. 나는 지금까지 운이 없이이 오류를 인터넷 검색했습니다. 아무도 내가 뭘 잘못하고 있는지 알아? 고맙습니다.

PS : 나는 CLISP 2.49 리눅스 민트 17.3 로사를 실행 해요 (2010-07-07)

답변

6

열려있는 파일을 사용하려면 open의 반환 값을 저장하고 princ에 두 번째 인수로 사용합니다 . close의 인수와 동일한 반환 값을 사용해야합니다.

일반적으로 편의 매크로 with-open-file을 사용합니다.

files chapter of Practical Common Lisp은 이러한 기능과 매크로를 사용하는 방법을 보여줍니다.

+0

고마워요! 나는'열린 파일 (open-file) '에 대해 읽었지 만, 나는 그것을 내 과제에 사용하는 것이 허락되지 않는다고 나는 믿는다. 대신에 '(setq 파일 (열린 "file.txt": 방향 : 출력 : if-does-not-exist : 생성 : if-exists : supersede)) (princ 'Hello 파일) 파일)' 잘 작동했습니다. – LePoufCelebre

+1

@LePoufCelebre 이것은 다른 프로그래밍 언어와 전혀 다르지 않습니다. C에서, 예를 들어,'int fd = open ("foo.txt", ...); 쓰기 (fd, ...);'not'open ("foo.txt", ...); 쓰기 ("foo.txt", ...);'. 아니면 자바에서'FileOutputStream out = new FileOutputStream ("foo.txt"); out.write (...)', 아닌'FileOutputStream out = new FIleOutputStream ("foo.txt"); "foo.txt".write (...);'. –

+0

@ JoshuaTaylor, 고맙습니다. 나는 이것을 몰랐습니다. – LePoufCelebre