LoginSignup
3
3

More than 5 years have passed since last update.

Yokohama.rb Monthly Meetup #47 memo

Last updated at Posted at 2014-08-09

難しい検索をするソリューション

  • Elasticsearch.org ( 新しい。おすすめらしい )
  • Apache Solr ( Elasticsearch がなかった時は これが主流だった )

File

size?

File.size?("no such file") #=> nil
File.size?("zero_size_file") #=> nil
File.size?("one_byte_file") #=> 1

size? は、サイズがゼロだと 0 ではなく nil を返す。
意外。

size? と zero? と exist?

size? zero? exist?
サイズ1のファイル 1 false true
サイズ0のファイル nil true true
リンク切れのsymlink nil false false
存在しないファイル nil false false
アクセス権のないファイル nil false false

存在しても、アクセス権がないと exist?false になる。
実装する人の気持ちになればあたりまえだけど、意外かもしれない。

あと、リンク切れのシンボリックリンクの exist?false になるので、 Dir.glob で得られたファイル名だからといって、 exist?true とは限らない。要注意かも。

TODO ( あるいは、緩募 ): Windows で、実在しないドライブとか、実在するけどメディアがささっていないドライブでの動作

cmp

File.cmp( "some_file", "another_file" ) #=> true / false

私としては、true/false を返すなら、 cmp ではなくで same? のような名前がいいなぁ。

cmp は <=> のような動作をする気がしてしまう。

link

Mac でも、普通のSDカード上とかでやると、ハードリンクは作れない。エラーになる。

File.link( "hoge", "fuga" ) #=> Errno::ENOTSUP: Operation not supported @ sys_fail2 - (hoge, fuga)

あと。
http://www.atmarkit.co.jp/ait/articles/1306/07/news111.html
によると、Vista 以降にはシンボリックリンクがあるらしい。

まだ試していない。

※ SDカードのファイルシステムは、"exFAT"( http://ja.wikipedia.org/wiki/ExFAT ) らしい。

stat と inspect

pry 上で

File.stat( "/" )

すると、 modeuidgid の辺りに

mode=040755 (directory rwxr-xr-x),
nlink=34,
uid=0 (root),
gid=0 (wheel),

という具合に便利な情報が出る。
これは pp の機能。競合の ap (awesome_print) にはこの機能はない。

FileUtils

mkdir_p

mkdir_p の p ってなんだ、という話になって。
調べてないけど Parent の p かなぁということで落ち着いた。

mkdir_pmkpath は同じメソッドの別名なんだけど、
pry で $ FileUtils#mkpath すると、 mkdir_p が出るので、真の名は mkdir_p らしい。

いろいろなデバイス

キャラクタデバイスの例としては、 /dev/urandom を挙げた。
ブロックデバイスの例としては /dev/disk0 を挙げた。
File.pip?( path )File.socket?( path ) が true になるような例は挙げられなかった。

ファイルの同一性

Windows には SUBST と JOIN ( http://en.wikipedia.org/wiki/SUBST )があり、その上 short file name ( 「PROGRA~1」のたぐい)もあるので、パスの比較でファイルの同一性を判断するのは得策じゃないと思う。

じゃあどうするかというとやっぱり GetFileInformationByHandle にいくしかないんじゃないかなぁ。

とはいえ、試してない。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3