ハロの外部記憶インターフェイス

そろそろ覚える努力が必要かも…

Fileクラス

ファイルオープン

file = File.open('README.md')
 => #<File:README.md> 
ile.read
 => "This is Readmi file\n\n" 
file.close
 => nil 

File.open('README.md') {|file| file.read}

openメソッドの2番目の引数

"r" : 読み込みモード
"w" : 書き込みモード,既にあればファイルサイズを0にする
"a" : 追記モード
"r+" :読み込み/書き込み用 : 元の内容を読み取り、書き換える事が出来る
"w+" : 読み込み/書き込み用 : 元の内容が削除される
"a+" : 読み込み/追加書き用、元の内容に追記が出来る(書き換えは出来ない)

"rb" : バイナリ読みモード、WindowsOSの場合、違いが発生する
  1. テキストモード : 文字を表示する時に"\n"を"\r\n"にする。入力する時に"\r\nを"\n"にする
  2. バイナリモード : 改行文字の変換をおこなわない。0x1aをEOF(ファイルエンド)として扱わない

改行文字

Windows系 : CR+LF
Unix系 : LF

ファイルの属性

File.basename : ファイル名を返す、引数2に".*"を指定すると拡張子を除いたファイル名を返す
File.dirname
File.extname
File.split : 指定されたパスからディレクトリ名とファイル名を配列で返す
File.stat : ファイルの属性
File.lstat : ファイルの属性 
File.atime : 最終アクセス時間
File.ctime : 状態変更時間
File.mtime : 最終更新時間

File.split("/tmp/test/mytest.rb")
 => ["/tmp/test", "mytest.rb"]

インスタンスからのメソッド

path : ファイルを開いた時のパス
lstat : ファイルの属性
atime : 最終アクセス時間
ctime : 状態変更時間
mtime : 最終更新時間

ファイルをテストする

File.exists?
File.file?
File.directory?
File.symlink?
File.executable?
File.readable?
File.writable?
File.size

ファイルの属性を設定

File.chmod(0644,'README.md')
File.chown(501, 20, 'README.md')

ファイルの最終アクセス時間、更新時間を設定する

File.utime(Time.now, Time.now, 'README.md')

絶対パスに展開

File.expand_path('README.me')

join

ファイルセパレータを設定する

File.join("/", "user", "bin")
 => "/user/bin"

その他メソッド

delete / unlink
truncate
rename

File.delete('README.md')
File.truncate('README.md', 0)
File.rename('README.md', 'READ_ME.md')
  1. truncateは引数2もバイト数分切り詰める

ファイルをロックする

flock

File.open('README.md', "w") { |file| file.flock(File::LOCK_EX)}