青山です。 On Fri, May 31, 2002 at 11:32:12AM +0900, Tanaka Akira wrote: > ただ、「本当に欲しい」のは、むろん、Content-Length: に書くべき値なわけ > で、これは StringIO/Tempfile に貯めてあるものを socket にそのまま垂れ > 流すようなコードが HTTP server にあるという状況では、IO#size (ないしは > File#size) のほうが必要なものだと思います。 あ、いえ、少し違います。[ruby-dev:17236] もまだわかりにくかったでしょ うか。内部的な事ではなく、むしろユーザーとしての話しでした。 cgi = CGI.new if maxsize <= cgi["upload_file_1"].stat.size ... else ... end if maxsize <= cgi["upload_file_2"].stat.size ... else ... end こんな感じですね。 より多くある場面としては、cgi["upload_file"].stat.size を表示させて、 アップされたサイズをユーザーに確認させる、等ですね。これはわりと良くあ る利用法では無いかと思います。 multipart form では、ファイルのアップロードに使われる、というだけでな く、複数同時にアップするというのも普通の事なので、全てをあわせたサイズ である Content-Length はまったく参考になりません。 と、このあたりの話しは Tempfile#size の追加という事でほぼまとまってい るようですが、なぜ File#size ではなく、Tempfile#size なのか、という疑 問が残る点はいかがでしょうか? IO#size 無い、File#size 無い、Tempfile#size 無い、StringIO#size 有る。 IO#stat 有る、File#stat 有る、Tempfile#stat 有る、StringIO#stat 無い。 これが、次のようになるわけですね。 IO#size 無い、File#size 無い、Tempfile#size 有る、StringIO#size 有る。 IO#stat 有る、File#stat 有る、Tempfile#stat 有る、StringIO#stat 無い。 私は、次のようになる方が自然だと思ったのですが。 IO#size 無い、File#size 有る、Tempfile#size 有る、StringIO#size 有る。 IO#stat 有る、File#stat 有る、Tempfile#stat 有る、StringIO#stat 無い。 StringIO#size は、String でもあるので #size があってもおかしくは無いで すし、File#size があれば、Tempfile#size は自然と思われます。 あるいは、いっそ、次のようになるとよりすっきりするかも。 IO#size 無い、File#size 有る、Tempfile#size 有る、StringIO#size 有る。 IO#stat 無い、File#stat 有る、Tempfile#stat 有る、StringIO#stat 無い。 マニュアルの記述から見ても、stat は IO というより File のようですし。 > IO > IOクラスは基本的な入出力機能を実装します. > > stat > ファイルのステータスを含むStat 構造体を返します.Stat構造体のメンバは > 以下の通りです. > > dev # デバイス番号(ファイルシステム) > ino # i-node番号 > mode # ファイルモード > nlink # ハードリンクの数 > uid # オーナーのユーザID > gid # オーナーのグループID > rdev # デバイスタイプ(スペシャルファイルのみ) > size # ファイルサイズ(バイト単位) > blksize # 望ましいI/Oのブロックサイズ > blocks # 割り当てられているブロック数 > atime # 最終アクセス時間 > mtime # 最終更新時間 > ctime # 最終i-node変更時間 ま、それはともかく、とりあえず、Tempfile#size よりは、File#size の方が 自然なような気がします。 -- 青山 和光 Wakou Aoyama <wakou / ruby-lang.org>