history

青木日記 RSS

<前の日 | この月 | 次の日>

2003-03-31

消えないファイル

ファイル名に使える文字を調べようと思い WinMe で次のプログラムを実行したところ、 "_" という名前のファイルが複数できて、どうやっても削除できなくなった。

(0..255).each do |i|
  begin
    File.open(i.chr, 'w').close
  rescue => err
    puts "#{i.chr.inspect}: #{err.class}; #{err.message}"
  end
end

どうしろと……。

パスに使える文字

ちなみに各種システムでの実行結果は次のようになった。

### Linux 2.4.20 (ext2)
"\000": Errno::ENOENT; No such file or directory - ""
".": Errno::EISDIR; Is a directory - "."
"/": Errno::EISDIR; Is a directory - "/"
 
### Solaris 9 (ufs)
"\000": Errno::ENOENT; No such file or directory - ""
".": Errno::EINVAL; Invalid argument - "."
"/": Errno::EINVAL; Invalid argument - "/"
 
### Cygwin / Windows Me (FAT32)
"\000": Errno::ENOENT; No such file or directory - ""
                       中略
"\037": Errno::ENOENT; No such file or directory - "\037"
"\"": Errno::ENOENT; No such file or directory - "\""
"*": Errno::ENOENT; No such file or directory - "*"
":": Errno::ENOENT; No such file or directory - ":"
"<": Errno::ENOENT; No such file or directory - "<"
">": Errno::ENOENT; No such file or directory - ">"
"?": Errno::ENOENT; No such file or directory - "?"
"|": Errno::ENOENT; No such file or directory - "|"
"\200": Errno::ENOENT; No such file or directory - "\200"
                       中略
"\210": Errno::ENOENT; No such file or directory - "\210"
"\340": Errno::ENOENT; No such file or directory - "\340"
"\353": Errno::ENOENT; No such file or directory - "\353"
"\354": Errno::ENOENT; No such file or directory - "\354"
"\355": Errno::ENOENT; No such file or directory - "\355"
"\357": Errno::ENOENT; No such file or directory - "\357"
"\360": Errno::ENOENT; No such file or directory - "\360"
                       中略
"\372": Errno::ENOENT; No such file or directory - "\372"
 
### Windows Me native (FAT32)
"\000": Errno::ENOENT; No such file or directory - ""
                       中略
"\037": Errno::ENOENT; No such file or directory - "\037"
"\"": Errno::ENOENT; No such file or directory - "\""
"*": Errno::ENOENT; No such file or directory - "*"
":": Errno::ENOENT; No such file or directory - ":"
"<": Errno::ENOENT; No such file or directory - "<"
">": Errno::ENOENT; No such file or directory - ">"
"?": Errno::ENOENT; No such file or directory - "?"
"|": Errno::ENOENT; No such file or directory - "|"
"\200": Errno::ENOENT; No such file or directory - "\200"
                       中略
"\210": Errno::ENOENT; No such file or directory - "\210"
"\340": Errno::ENOENT; No such file or directory - "\340"
"\353": Errno::ENOENT; No such file or directory - "\353"
"\354": Errno::ENOENT; No such file or directory - "\354"
"\355": Errno::ENOENT; No such file or directory - "\355"
"\357": Errno::ENOENT; No such file or directory - "\357"
"\360": Errno::ENOENT; No such file or directory - "\360"
                       中略
"\372": Errno::ENOENT; No such file or directory - "\372"

Linux と Solaris で微妙に errno が違うのがちょっとイイ感じである。

Cygwin/WinMe と WinMe の結果は全く同じだった。 ということはあの変なエントリは WinMe ネイティブの仕様なのか。

あとは Windows 2000 (NTFS) を試したいところだけども、 リブートしないといけないのが面倒だなあ。 やっぱり専用マシンが欲しい。

あ……

あ、消えた。さっきの逆に 0..255 を全部 unlink したらオケー。 あれは何だったんだろう? もう一回やってみよっと。

だいたいこういうときって墓穴掘るんだよな〜。 本当に消えなくなったりしてさ。

追加

でもって FreeBSD4.7/Alpha。 こないだ HDD を交換したあと ruby を入れ忘れてて今コンパイルしたことは秘密だ。

### FreeBSD 4.7 (ufs)
"\000": Errno::ENOENT; No such file or directory - ""
".": Errno::EISDIR; Is a directory - "."
"/": Errno::EISDIR; Is a directory - "/"

あ、EISDIR なんだ。ちょっと意外かも。

4 文字コマンド

Solaris と FreeBSD には clri (clear inode) がある。Linux にはない。

Solaris には crle (config runtime linking environment) がある。

ややこしい名前を付けるな。

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS