2012-12-21 5 views
0

서브 디렉토리 내의 파일에 쓰려고합니다. 이 파일은 코드에 의해 만들어 지지만 일단 파일이 만들어지면 스크립트 실행이 끝난 후 파일이 비어 있습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?Ruby : 서브 디렉토리의 파일에 쓰기

"directory.xml"은 스크립트에 의해 생성되는 각 "contacts_letter.xml"파일에 연결해야하지만 directory.xml은 비어 있습니다. 왜?

+3

'file.rewind'를'file.close'로 바꿔보십시오. – AJcodez

+1

예, 저는 같은 주석을 쓰고있었습니다 ...하지만 문제를 재현 할 수 없었습니다. 두 경우 모두 파일을 닫아야합니다. 문제가 해결되지 않으면 OS와 루비 버전을 나열하십시오. – rudolph9

+0

파일 닫기/되감기 전에 file.flush를 추가 할 수도 있습니다. – TheConstructor

답변

3

개성있는 루비 블록을 사용하여 파일을 작성합니다

File.new("directory.xml", "w") do |fo| 
    fo.puts "<?php header(\"Content-type: text/xml\"); ?>" 
    fo.puts "<CiscoIPPhoneMenu>" 
    fo.puts "<Title>Telefonbuch</Title>" 
    fo.puts "<Prompt>Dir External</Prompt>" 
    letters_used.each do |letter| 
    filename = "contacts_" + letter + ".xml" 
    FileUtils.touch(filename) 
    fo.puts "<MenuItem>" 
    fo.puts "<Name>" + letter.upcase + "</Name>" 
    fo.puts "<URL>http://" + HOSTNAME + WEBSERV_DIR + "/" + filename + "</URL>" 
    fo.puts "</MenuItem>" 
    end 
    fo.puts "</CiscoIPPhoneMenu>" 
end 

이는 블록의 끝에서 자동으로 파일을 닫습니다.

+0

예, 블록 솔루션이 도움이되었습니다. – simonszu