Rails에서 로컬 파일의 내용을 변수로 읽어들입니다.


87

내가 원하는 것은 로컬 파일에서 모든 콘텐츠를 가져 와서 변수에 저장하는 것입니다. 어떻게?

File.read(@icon.full_filename).each {|l| r += l}

그것의 일부만을 제공합니다. PHP에서는 방금 file_get_contents.


1
이 솔루션과 zed_0xff가 제안한 솔루션이 Mac / Linux에서 완벽하게 작동하기 때문에 이것이 고유 한 Windows 문제라고 생각합니다. 나는 File.read를 할 때 irb가 \ r \ n을 \ n으로 바꾼다는 것을 알고 있습니다. 아마도 여기에 관련이 있습니까?
Steven

답변:


165
data = File.read("/path/to/file")

1
나는 그렇게 생각했지만 길이 52의 문자열을 제공합니다. File.size ( "/ path / to / file")로 이동할 때 실제 파일 크기는 1676입니다.
Steven

4
파일을 열어 두지 않습니까?
Tom Rossi

난이게 좋아! 파일 내용 유형에서 헤더를 유지하는 방법을 아는 것이 좋을 것입니다
Tom Roggero 2013-09-16

이것은 블록을 사용하지 않고 읽을 때 유용하며, 콘텐츠를 쉽게 구문 분석하고 클래스를 만들 필요없이 다른 블록에서 사용할 수있는 변수로 설정할 수 있습니다.
Andrew

3
@TomRossi의 질문을 해결하기 위해-아니요, 파일을 열어 두지 않습니다. File 클래스에서 read를 호출하면 파일을 열고 읽고 닫습니다. 그러나 파일의 인스턴스 (먼저 열어야 함)에 대해 read를 호출해도 닫히지 않습니다. 여기에서 호출되는 메소드는 ruby-doc.org/core-2.5.0/IO.html#method-i- 와 달리 ruby-doc.org/core-2.5.0/IO.html#method-c-read입니다. 읽기
AndrewKS에게


16

여기에 내 자신의 질문에 대답하는 것은 open 또는 File.open 함수 호출에서 추가 플래그가 필요한 바이너리 파일 (내 경우에는 JPEG)을 읽을 때 발생하는 Windows 전용 기이 한 것입니다. 나는 그것을 수정 open("/path/to/file", 'rb') {|io| a = a + io.read}했고 모두 괜찮 았습니다.


10
: 당신이 실제로 함께 파일의 무리을 연결하지 않는 한, 나는 그냥 쓰기 것data = File.open("file", "rb") {|io| io.read}
글렌 잭맨

당신은 메달을받을 자격이 있습니다. 이 답변을 우연히 발견 할 때까지 Windows 서버에서 보낸 PDF 첨부 파일을 읽을 수없는 이유를 파악하는 데 몇 시간이 걸렸습니다.
Augusto Samamé Barrientos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.