From: Yui NARUSE Date: 2011-12-29T10:38:54+09:00 Subject: [ruby-dev:45060] [ruby-trunk - Bug #5819][Assigned] Windowsで空のドライブのルートディレクトリに対するFile.stat が失敗する Issue #5819 has been updated by Yui NARUSE. Status changed from Open to Assigned Assignee set to Usaku NAKAMURA ---------------------------------------- Bug #5819: Windowsで空のドライブのルートディレクトリに対するFile.stat が失敗する https://bugs.ruby-lang.org/issues/5819 Author: Masateru OKAMOTO Status: Assigned Priority: Normal Assignee: Usaku NAKAMURA Category: Target version: ruby -v: ruby 1.9.3p0 (2011-10-30) [i386-mswin32_100] Windows Vista32bit版上の 1.9.3-p0,1.9.2-p290,1.8.7-p330で File.statが失敗します。(すべてActiveScriptRubyパッケージで確認) また、Vista 32bit + ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mingw32] では成功しました。 ここでF:ドライブは ファイル/サブディレクトリが一切無い空っぽのFAT16の USBドライブ(エクスプローラではリムーバブルディスクと表示)です。 FileUtils.touch 'F:\\a.txt' としてファイルを作った後は一転して 成功するようになります。 c:\>dir F:\ ドライブ F のボリューム ラベルがありません。 ボリューム シリアル番号は 2850-20AE です F:\ のディレクトリ ファイルが見つかりません c:\>ruby -v ruby 1.9.3p0 (2011-10-30) [i386-mswin32_100] C:\>irb irb(main):001:0> require 'FileUtils' => true irb(main):002:0> File.stat 'F:\\' Errno::ENOENT: No such file or directory - F:\ from (irb):2:in `stat' from (irb):2 from C:/Program Files/Ruby-1.9.3-p0/bin/irb.bat:19:in `
' irb(main):003:0> File.directory? 'F:\\' => false irb(main):004:0> FileUtils.touch 'F:\\a.txt' => ["F:\\a.txt"] irb(main):005:0> File.stat 'F:\\' => # irb(main):006:0> File.directory? 'F:\\' => true File.statが失敗するためFile.directory?のみならず FileUtils.mv(foo, 'F:\\') や FileUtils.cp(bar, 'F:\\')も dstにファイル名を補うことができず失敗してしまいます。最初は理由が分からず 悩みました。(mvでは Errno::EINVAL: Invalid argumentとなる) 現在のwinnt_stat()はルートディレクトリが空だった場合に内部でcheck_valid_dir()の FindFirstFileW("F:\\.\\*", )が失敗してしまう('.'すら存在しない)のが 直接の原因になっている様子です。 ドライブルートを特別扱いしてしまえば、丸く収まるんでしょうか。。。 -- http://redmine.ruby-lang.org