2012-05-10 2 views
0

내가 코드에서 명시 적으로 연 파일을 닫는 것이 얼마나 필요한지에 대한 생각이 들기 만합니다. 저는 C 및 C++ 프로그래밍에 관한 배경을 가지고 Ruby를 탐색하기 시작했습니다. 의견에 미리 감사드립니다. 당신이 파이썬에서 with 문 같은 것을 사용하지 않는이 스 니펫에서 파일을 닫지 않는 것이 좋습니다.

from_file, to_file = ARGV 
script = $0 

puts "Copying from #{from_file} to #{to_file}" 
File.open(to_file, 'w').write(File.open(from_file).read()) 

puts "Alright, all done." 
+4

파일을 복사하려는 경우 ['FileUtils.cp'] (http://ruby-doc.org/stdlib-1.9.3/libdoc/fileutils/rdoc/FileUtils.html)을 사용할 수 있습니다. # method-c-cp). –

+1

@AndrewMarshall : 지금 당부드립니다. 감사! – stanigator

+0

오감 후 지퍼를 당기지 않는 것이 나쁜 습관이라는 점에서 fd를 열어 두지 않는 것은 나쁜 습관입니다. – pguardiario

답변

6

항상 나쁜 관행을 파일입니다 폐쇄하지 않습니다.

스크립트 언어는 일반적으로 종료 할 때 파일을 닫습니다. 파일을 다 마자 마자 바로 작업을 수행하는 것이 더 깔끔합니다.

Apparently 루비는 파이썬의 with 비슷한 있습니다

File.open(from_file, 'r') do |f_in| 
    File.open(to_file, 'w') do |f_out| 
     f_out.write(f_in.read) 
    end 
end 

관련 문서 : http://ruby-doc.org/core-1.9.3/File.html#method-c-open

+0

그렇다면 핸들을 잡는 데 여분의 라인이 필요할 것입니다. 아니면 그렇습니까? – stanigator

+4

@stanigator : 코드의 품질이 향상되면 몇 줄의 코드를 추가하는 것에 대해 (조금이라도) 신경을 쓰는 이유는 무엇입니까? –

+0

게다가, 나는 루비가 당신이 수동으로 파일 중 하나를 열지 않는 파일을 복사하는 간단한 방법을 가지고 확신합니다. – ThiefMaster

0

그것은 좋은 대답하지만 외부 블록에 출력 파일을 넣고 <를 사용하는 것이 더 '루비'의를 < :

File.open(to_file, 'w') do |f_out| 
    f_out << File.open(from_file){|f| f.read} 
end 

참고 읽기에는 'r'이 필요하지 않습니다. .

2

여기에 짧은 버전입니다 :

File.write to_file, File.read(from_file) 
1

이 코드 (마테우스 모레이라) 파일을 자동으로 종료 :

File.write to_file, File.read(from_file) 

이 코드 파일을 닫습니다 할 방법이 없습니다 :

File.open(to_file, 'w').write(File.open(from_file).read()) 

자동 닫는 것 같아요.

+0

나는 이것을 1 줄로 할 수 있는지도 몰랐다. – stanigator

관련 문제