루비에서 파일을 만드는 방법


170

새 파일을 만들려고하는데 파일이 예상대로 작동하지 않는 것 같습니다. 내가 시도한 것은 다음과 같습니다.

File.new "out.txt"
File.open "out.txt"
File.new "out.txt","w"
File.open "out.txt","w"

내가 온라인에서 읽은 모든 것에 따르면 모든 것이 작동해야하지만 그중 하나가 나에게 이것을 제공합니다.

ERRNO::ENOENT: No such file or directory - out.txt

이것은 루비 스크립트뿐만 아니라 IRB에서도 발생합니다. 내가 무엇을 놓치고 있습니까?


13
처음 두 개는 작동하지 않아야하지만 두 번째 두 개는 동의어이며 확실히 작동해야합니다.
Andrew Marshall

@Andrew : 처음 두 개만 시도했다고 생각하십니까?
mu는

1
@muistooshort 제가 도달 할 수있는 유일한 결론입니다. 권한 오류가 발생 Errno::EACCES하지 않았을 것 ENOENT입니다.
Andrew Marshall

2
좋아, 이제 바보 같아 처음 두 가지는 작동하지 않지만 두 번째는 작동합니다. 내가 시도했다고 스스로를 어떻게 확신했는지 잘 모르겠습니다. 모두의 시간을 낭비해서 죄송합니다.
Civatrix

1
@Civatrix 문제 없습니다. 우리 모두는 때때로 시간을 낭비합니다.
Darth Egregious

답변:


434

사용하다:

File.open("out.txt", [your-option-string]) {|f| f.write("write your stuff here") }

옵션은 다음과 같습니다.

  • r-읽기 전용 파일이 존재해야합니다.
  • w -쓸 빈 파일을 만듭니다.
  • a -파일에 추가 파일이 없으면 생성됩니다.
  • r+-읽기와 쓰기 모두를 위해 파일을 엽니 다. 파일이 존재해야합니다.
  • w+ -읽고 쓰기위한 빈 파일을 만듭니다.
  • a+-읽고 추가 할 파일을 엽니 다. 파일이 없으면 작성됩니다.

귀하의 경우에 'w'바람직합니다.

또는 당신은 가질 수 있습니다 :

out_file = File.new("out.txt", "w")
#...
out_file.puts("write your stuff here")
#...
out_file.close

11
좋은 대답입니다. 루비 conevntion은 var 이름의 뱀 사건입니다. 초보자를위한 것입니다. outFile처럼 보일 것 out_file입니다.
Adam Waite

3
@ AdamWaite 나는 귀하의 snake_case 제안에 따라 답변을 편집 하여이 의견을 문맥에 남겨 둡니다.
Kris

3
@zanbri-파일을 닫지 않으면 어떻게됩니까?
Erran Morad

1
큰 답변, 포괄적이고 간단한
Boris

2
@BoratSagdiyev "더 이상 참조되지 않는 File 객체는 가비지 수집 대상이됩니다. File 객체가 가비지 수집되면 파일이 자동으로 닫힙니다." rootr.net/rubyfaq-9.html
jkdev

35

시험

File.open("out.txt", "w") do |f|     
  f.write(data_you_want_to_write)   
end

사용하지 않고

File.new "out.txt"

25

다음 "w+"대신 쓰기 모드로 사용하십시오 "w".

File.open("out.txt", "w+") { |file| file.write("boo!") }

4
쓰기 전용 ( w) 또는 읽기 및 쓰기 ( w+) 모두에 따라 다릅니다 .
jkdev

20

좋아, 이제 바보 같아 처음 두 가지는 작동하지 않지만 두 번째는 작동합니다. 내가 시도했다고 스스로를 어떻게 확신했는지 잘 모르겠습니다. 모두의 시간을 낭비해서 죄송합니다.

이것이 다른 사람에게 도움이되는 경우 존재하지 않는 디렉토리에 새 파일을 만들려고 할 때 발생할 수 있습니다.


11

디렉토리가 존재하지 않습니다. open해당 디렉토리를 생성하지 않으므로 존재하는지 확인하십시오 .

나는이 문제를 잠시 동안 만났다.


11

File.newFile.open(읽기 모드로 기본 설정 'r'파일을 덮어 쓰기 가능 피하기 위해, 안전 메커니즘으로). 'w'파일로 출력 하려면 쓰기 모드를 사용하도록 Ruby에 명시 적으로 알려야합니다 ( 가장 일반적인 방법 임).

출력 할 텍스트가 쓰기가 아닌 문자열 인 경우 :

File.open('foo.txt', 'w') { |fo| fo.puts "bar" }

또는 더 나쁜 :

fo = File.open('foo.txt', 'w')
fo.puts "bar"
fo.close

더 간결하게 사용하십시오 write:

File.write('foo.txt', 'bar')

write우리가 사용할 수 있도록 모드를 허용했다 'w', 'a', 'r+'필요한 경우.

open블록을 사용하면 반복 루프에서 출력을 계산하고 파일을 열린 상태로 유지하려는 경우에 유용합니다. write한 번에 컨텐츠를 출력 한 다음 파일을 닫을 경우에 유용합니다.

자세한 내용 은 설명서 를 참조하십시오.


큰 반응, 이것은 가장 관용적이고 따라서 "루비 스트"방식입니다. 최고의 답변이어야합니다.
지노

글쎄요, 동의합니다. 블록 형식을 사용하여 파일을 쓰는 경우는 거의 없습니다. 너무 시끄 럽습니다.
Tin Man

11

목표가 파일을 만드는 것이라면 가장 직접적인 방법은 다음과 같습니다.

 FileUtils.touch "foobar.txt"

1
data = 'data you want inside the file'.

당신이 사용할 수있는 File.write('name of file here', data)


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.