디렉토리는 파일을 포함한다. 루비에서 제공하는 Dir 클래스를 이용해서 디렉토리 관련 작업을 할 수 있다.
디렉토리 탐험하기
chdir 메서드를 이용해서 작업 디렉토리를 변경할 수 있다.
Dir.chdir("/usr/bin")
Dir.pwd로 현재 작업 디렉토리를 알 수 있다.
puts Dir.pwd # /usr/bin을 출력한다.
Dir.entries로 디렉토리에 있는 파일의 내용을 가져올 수 있다.
puts Dir.entries("/usr/bin").join("\n")
foreach를 이용할 수도 있다.
Dir.foreach("/usr/bin") do | entry |
puts entry
end
디렉토리 만들기, 삭제
Dir.mkdir('mydir')
Dir.delete('testdir')
임시파일 다루기
프로그램이 실행되는 동안에만 임시로 사용할 데이터를 저장하기 위해서 임시파일을 생성하기도 한다. 리눅스 운영체제는 이런 임시파일들을 위해서 임시파일 디렉토리 "/tmp"를 제공한다. 임시파일이 필요하다면, "/tmp"디렉토리에 파일을 만들어서 사용하면 된다.
Dir.tmpdir로 운영체제가 제공하는 임시디렉토리를 찾을 수 있다. Dir.tmpdir은 루비가 기본제공하는 메서드가 아니다. 사용하려면 tmpdir이 필요하다.
require 'tmpdir'
tmpfilename = File.join(Dir.tmpdir, 'mytemp.dat')
tempfile = File.new(tempfilename, "w")
tempfile.puts "This is a temporary file"
tempfile.close
File.delete(tempfilename)
/tmp 디렉토리는 임사파일을 만들기 위한 모든 애플리케이션이 공통으로 사용한다. 따라서 중복된 파일이름을 피해야 한다. 루비는 Tmpfile이라는 메서드를 제공하는데, 이 메서드를 이용하면 중복되지 않는 임시파일을 만들 수 있다.
require 'tempfile'
f = Tempfile.new('tingtong')
f.puts "Hello"
puts f.path
f.close
Contents
파일
표준출력, 표준입력, 표준에러
파일 열기 닫기
aFile = File.new("filename", "mode") # 파일 관련 작업들 aFile.closeFile.open 메서드
File.open("filename", "mode") do | fobj | # 파일 관련 작업들 end파일 읽기, 쓰기
sysread method
aFile = File.new('file.rb', 'r') fSize = aFile.stat.size if aFile content = aFile.sysread(fSize) puts content else puts 'Unable open file' endsyswrite method
aFile = File.new('test.tmp', 'w') if aFile puts aFile.syswrite('Hello world!!!') else puts 'Unable open file' endeach_byte method
aFile = File.new('test.tmp', 'r') if aFile aFile.each_byte do | ch | putc ch putc '.' end else puts 'Unable open file' endIO.readlines method
lines = IO.readlines('file.rb', 'r') lines.each do | line | print line endIO.foreach method
IO.foreach('file.rb') do | line | puts line end파일 이름 변경과 삭제
File.rename('test1.txt', 'test2.txt') File.delete('test2.txt')파일 권한과 소유자
file = File.new('test2.txt', 'w') file.chmod(0755)파일 정보 확인
File.open('test3.txt') if File::exists?('test3.txt')puts "Regular File" if File.file?('test2.txt') # 일반 파일인지 puts "Regular File" if File.pipe?('test2.txt') # 파이프 인지 puts "Regular File" if File.socket?('test2.txt') # 소켓 인지 puts "Regular File" if File.symlink?('test2.txt') # 심볼릭 링크인지 puts "Directory" if File.directory?('test2.txt') # 디렉토리 인지puts "readable" if File.readable?('test2.txt') puts "writeable" if File.writable?('test2.txt') puts "executable" if File.executable?('test2.txt')File.zero?('test2.txt')File.size('test2.txt')puts File.ftype('test2.txt') # file puts File.ftype('/dev/sdb') # blockSpecial puts File.ftype('/dev/stdout') # link puts File.ftype('/dev/zero') # characterSpecial심볼릭 링크 읽기
디렉토리
디렉토리 탐험하기
Dir.chdir("/usr/bin")puts Dir.entries("/usr/bin").join("\n")Dir.foreach("/usr/bin") do | entry | puts entry end디렉토리 만들기, 삭제
Dir.mkdir('mydir') Dir.delete('testdir')임시파일 다루기
require 'tempfile' f = Tempfile.new('tingtong') f.puts "Hello" puts f.path f.close파일 상태
# touch text.txt File.readable?("test.txt") # true File.writeable?("test.txt") # true File.executable?("test.txt") #File.size?("text.txt")File::ftype("text.txt")히스토리
Recent Posts
Archive Posts
Tags