C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: System.IOでのフォルダの取得順序について


(過去ログ 69 を表示中)

[トピック内 20 記事 (1 - 20 表示)]  << 0 >>

■40115 / inTopicNo.1)  System.IOでのフォルダの取得順序について
  
□投稿者/ らんぺるーる (79回)-(2009/08/20(Thu) 14:52:20)

分類:[.NET 全般] 

「System.IO.Directory.GetDirectorie」を使用してフォルダの情報を取得する際に、
基本的には、どの端末でもフォルダ名称の昇順で取得がされます。

ところが、あるサーバーのフォルダ情報を取得した場合に、
降順で取得がされました。

色々調査をしたところ、本関数による取得順序に保証はなく、
取得後にソートをする必要があるということは分かりました。

ただし、降順で取得される端末が極端に少ないため、@昇順とならない条件、
A運用対処で昇順設定に戻せるのかの2点を理解しておきたいと考えております。

マスターファイルテーブルへの書き込み順が影響していたりと
ファイルシステムのコアな部分になるのでしょうか。

ちょっとしたコントロールパネルの設定で直せれば運用対処で
いきたいと考えております。アドバイスをお願いいたします。

(できれば、スクリプトの修正は避けたいと考えております。)

引用返信 編集キー/
■40134 / inTopicNo.2)  Re[1]: System.IOでのフォルダの取得順序について
□投稿者/ .SHO (1019回)-(2009/08/20(Thu) 16:45:43)
> @昇順とならない条件

条件はないでしょう。
昇順だの降順だのになる方が珍しいんじゃないかな?
通常は、バラバラに取得されると思うけど。

> A運用対処で昇順設定に戻せるのか

無理です。
仮に可能だったとしても、プログラムでソートすれば済むことを
運用対処にする必要もないと思いますが。
引用返信 編集キー/
■40135 / inTopicNo.3)  Re[1]: System.IOでのフォルダの取得順序について
□投稿者/ まどか (615回)-(2009/08/20(Thu) 16:54:01)
> 本関数による取得順序に保証はなく、

ということは、

> 降順で取得される端末が極端に少ないため、

「多い」「少ない」は無意味ではないですか?

> @昇順とならない条件、

規則性がないと言っているわけですので、少なくとも、そのメソッドより上層(アプリケーション寄り)に条件は存在しません。
#並べ替えてリストを返すといったメソッドがあれば別です。

> A運用対処で昇順設定に戻せるのか

前記のとおりですが、
設定できるのなら、「保証されません」ではなく「〜に依存します」という記述になっているはずです。

> 取得後にソートをする必要があるということは分かりました。

これが解決策ですね。

引用返信 編集キー/
■40145 / inTopicNo.4)  Re[2]: System.IOでのフォルダの取得順序について
□投稿者/ らんぺるーる (80回)-(2009/08/20(Thu) 17:27:28)
No40134 (.SHO さん) に返信
>通常は、バラバラに取得されると思うけど。
降順になる環境(サーバー端末)以外は、全て昇順となりました。
また、サーバー端末内でのフォルダコピーでは
取得順序に変更はなく、一度ローカルにコピーすると、
以降そのフォルダを参照した場合に昇順になりました。
(例外なく、昇順または降順になっており、
バラバラに取得されるケースは、今のところ確認しておりません。)

せめて何の情報をインプットにして取得順序が決定されるのかが
わかればいいのですが。


引用返信 編集キー/
■40146 / inTopicNo.5)  Re[2]: System.IOでのフォルダの取得順序について
□投稿者/ らんぺるーる (81回)-(2009/08/20(Thu) 17:29:29)
No40134 (.SHO さん) に返信
>>@昇順とならない条件
>
> 条件はないでしょう。
> 昇順だの降順だのになる方が珍しいんじゃないかな?
> 通常は、バラバラに取得されると思うけど。
>
>>A運用対処で昇順設定に戻せるのか
>
> 無理です。
> 仮に可能だったとしても、プログラムでソートすれば済むことを
> 運用対処にする必要もないと思いますが。

すみません、返信が漏れましたが、
ソートを実装に追加するのは非常に簡単にできます。
ただ、リリース寸前のプログラムですので、
出来れば今からの修正は見送りたいということです。

また、見送った場合に、運用対処で直せるのであれば、
ユーザーに連絡をしたいという意図で運用対処を聞いております。




引用返信 編集キー/
■40147 / inTopicNo.6)  Re[3]: System.IOでのフォルダの取得順序について
□投稿者/ らんぺるーる (82回)-(2009/08/20(Thu) 17:34:32)
たびたびすみません。
前提で一つ書き漏れがありました。

アプリケーションの仕様についてですが、
GetDirectorieで取得したフォルダの情報を
画面にツリーで表示しています。
引用返信 編集キー/
■40148 / inTopicNo.7)  Re[3]: System.IOでのフォルダの取得順序について
□投稿者/ まどか (617回)-(2009/08/20(Thu) 17:45:15)
> 運用対処で直せるのであれば、
> ユーザーに連絡をしたいという意図で運用対処を聞いております。

最初にご自分で「保証されない」ということを「分かりました」と書かれていますが。。。

保証されないのだから、OSのどこをどうしようと保証されないのです。

引用返信 編集キー/
■40149 / inTopicNo.8)  Re[4]: System.IOでのフォルダの取得順序について
□投稿者/ Jitta on the way (400回)-(2009/08/20(Thu) 17:45:25)
No40147 (らんぺるーる さん) に返信

内部的に持っている ID の順だと思います。
もしかすると、ファイル検索のために付けているインデックスが関係しているかも知れません。
引用返信 編集キー/
■40151 / inTopicNo.9)  Re[4]: System.IOでのフォルダの取得順序について
□投稿者/ らんぺるーる (83回)-(2009/08/20(Thu) 18:10:58)
No40148 (まどか さん) に返信
>>運用対処で直せるのであれば、
>>ユーザーに連絡をしたいという意図で運用対処を聞いております。
>
> 最初にご自分で「保証されない」ということを「分かりました」と書かれていますが。。。
>
> 保証されないのだから、OSのどこをどうしようと保証されないのです。


取得順序が保証されないのは分かっておりますが、
(実際には)昇順、降順のいずれかに整列されて取得されるので、
何の設定が起因となって、昇順、降順が
かわるのかをおさえておきたいということです。

引用返信 編集キー/
■40152 / inTopicNo.10)  Re[1]: System.IOでのフォルダの取得順序について
□投稿者/ みきぬ (620回)-(2009/08/20(Thu) 18:23:10)
回答でなくてすみませんが…

No40115 (らんぺるーる さん) に返信
> 「System.IO.Directory.GetDirectorie」を使用してフォルダの情報を取得する際に、
>
> ところが、あるサーバーのフォルダ情報を取得した場合に、
> 降順で取得がされました。
>
> 色々調査をしたところ、本関数による取得順序に保証はなく、
> 取得後にソートをする必要があるということは分かりました。
>
これの情報源ってどこでしょうか?

いや、Directory.GetFiles() については順序は保証されないといった記述は MSDN で見つけられましたが、
Directory.GetDirectories() についてはいくら探しても見つからないので…。
引用返信 編集キー/
■40155 / inTopicNo.11)  Re[1]: System.IOでのフォルダの取得順序について
□投稿者/ みきぬ (621回)-(2009/08/20(Thu) 19:06:43)
No40115 (らんぺるーる さん) に返信
> 「System.IO.Directory.GetDirectorie」を使用してフォルダの情報を取得する際に、
> 基本的には、どの端末でもフォルダ名称の昇順で取得がされます。
>
今使っている端末で、試しに Directory.GetDirectories(@"C:\Windows","*", SearchOption.AllDirectories) を
実行してみたところ、結果は昇順でも降順でもありませんでした。
引用返信 編集キー/
■40158 / inTopicNo.12)  Re[3]: System.IOでのフォルダの取得順序について
□投稿者/ 魔界の仮面弁士 (1234回)-(2009/08/20(Thu) 19:30:03)
No40145 (らんぺるーる さん) に返信
> せめて何の情報をインプットにして取得順序が決定されるのかが
> わかればいいのですが。

ディレクトリエントリの順序では無いでしょうか。

それぞれのファイルシステムは何ですか?
http://support.microsoft.com/kb/100108/ja
引用返信 編集キー/
■40170 / inTopicNo.13)  Re[4]: System.IOでのフォルダの取得順序について
□投稿者/ GOD (3回)-(2009/08/20(Thu) 20:51:01)
No40147 (らんぺるーる さん) に返信
> アプリケーションの仕様についてですが、
> GetDirectorieで取得したフォルダの情報を
> 画面にツリーで表示しています。
>
実はツリーにSortedプロパティがあって解決とかないですか?
GetDirectorieした時点でどうしても昇順になってほしいならプログラムでやるしかないと思うけど。

>取得順序に変更はなく、一度ローカルにコピーすると、
>以降そのフォルダを参照した場合に昇順になりました。
が確認されているなら運用でそうしてもらうとか。

引用返信 編集キー/
■40179 / inTopicNo.14)  Re[2]: System.IOでのフォルダの取得順序について
□投稿者/ まどか (620回)-(2009/08/20(Thu) 22:30:15)
No40152 (みきぬ さん) に返信
> いや、Directory.GetFiles() については順序は保証されないといった記述は MSDN で見つけられましたが、
> Directory.GetDirectories() についてはいくら探しても見つからないので…。

おっと、見落としていました。。。


> らんべーるさん

私の発言は、「技術的興味や好奇心から知りたい」が読み取れなかったことによるものです。
ご了承ください。

引用返信 編集キー/
■40199 / inTopicNo.15)  Re[1]: System.IOでのフォルダの取得順序について
□投稿者/ よねKEN (407回)-(2009/08/21(Fri) 09:43:03)
2009/08/21(Fri) 09:44:22 編集(投稿者)

WindowsXP SP2(ファイルシステムNTFS)の環境で試してみました。

あるフォルダを新規に作成し、その配下で
新規にフォルダをA、AA、AB、B、BA、C、・・・といったように作成して実験しました。
・作成する順番をいろいろ変えてみる
・例えば、A、B、Cと作ってBを削除してみる
・例えば、A、B、Cと作って、A→C、C→Aとりネームしてみる
・他のフォルダで作ったフォルダを切り取ってコピーしてみる
・作ったフォルダの配下にファイルを置いてみる
・デフラグをしてみる(今回のデフラグはこのフォルダ事態に作用してないと思うので・・・検証の足しになりませんが)
etcごちゃごちゃやってみましたが、Directory.GetDirectoriesの取得結果は昇順に並んでいるように見えました。

#昇順っぽく取得されることがあるのかどうかの検証です。

ちなみに、Directory.GetDirectoriesは内部でWindows APIのFindFirstFile関数、FindNextFile関数を
使っているわけですが、これらの関数のドキュメントにも取得順序についての記述は見当たりませんでした。

ファイルシステムの仕様とかよく知らないので、これ以上の調査手段が思いつかない私にはお手上げですorz
引用返信 編集キー/
■40201 / inTopicNo.16)  Re[2]: System.IOでのフォルダの取得順序について
□投稿者/ GOD (4回)-(2009/08/21(Fri) 10:18:19)
No40199 (よねKEN さん) に返信
> 2009/08/21(Fri) 09:44:22 編集(投稿者)
> ちなみに、Directory.GetDirectoriesは内部でWindows APIのFindFirstFile関数、FindNextFile関数を
> 使っているわけですが、これらの関数のドキュメントにも取得順序についての記述は見当たりませんでした。
>
http://msdn.microsoft.com/en-us/library/aa364428(VS.85).aspx
でしょうか?
引用返信 編集キー/
■40202 / inTopicNo.17)  Re[2]: System.IOでのフォルダの取得順序について
□投稿者/ 774RR (379回)-(2009/08/21(Fri) 10:20:33)
NTFS のファイル列挙はアルファベット順 (どこまで NLS 対応しているかは不明) だと思った。
Microsoft の仕様書はみつからないけどたとえば過去ログ
http://bbs.wankuma.com/index.cgi?mode=al2&namber=13107&KLOG=28

FAT12/16/32 のファイル列挙はディレクトリエントリ順
UNIX 系の xfs/ext/reiser のファイル列挙もディレクトリエントリ順
※要するにファイルを作成した順(削除、名前変更しない限り)
※(ls は取得後に自分でソートしている)

なので、その特定サーバとやらが samba 系サーバならまさに仕様どおり。
引用返信 編集キー/
■40227 / inTopicNo.18)  Re[3]: System.IOでのフォルダの取得順序について
□投稿者/ らんぺるーる (84回)-(2009/08/21(Fri) 16:21:00)
>みきぬさん
正式文書では、取得順についての記述がありませんでした。すみません。
以下のmsdnフォーラムでの回答では記載があります。
<http://social.msdn.microsoft.com/forums/ja-JP/csharpexpressja/thread/26d1f3a9-717d-465a-b10e-49a81e64aa7f/>

また、検証された取得順についてですが、
第三引数に「SearchOption.AllDirectories」を指定しているため、
単純にアルファベット順に取得されていないのではないかと推測しました。
(同じ階層のフォルダを先に取得等)

>魔界の仮面弁士さん
サーバのファイルシステム、ユーザのファイルシステムとも「NTFS」です。

>GODさん
プログラムで修正をおこなうのであれば、ツリーのソートでも問題ありません。

>みなさま
対応としては、GetDirectorieで取得した順序がそのまま表示されるという
仕様で問題ないという整理になりました。
今後、ファイル情報やフォルダ情報を取得する際には、取得順に気をつけようと
思います。

GetDirectorieで取得される順序については、ファイルシステムについて
習熟する必要がありそうなので、今回の質問はここでクローズにさせて頂きます。
有難うございました。



解決済み
引用返信 編集キー/
■40229 / inTopicNo.19)  Re[2]: System.IOでのフォルダの取得順序について
□投稿者/ らんぺるーる (85回)-(2009/08/21(Fri) 16:22:56)
No40199 (よねKEN さん) に返信
> 2009/08/21(Fri) 09:44:22 編集(投稿者)
>
> WindowsXP SP2(ファイルシステムNTFS)の環境で試してみました。
>
> あるフォルダを新規に作成し、その配下で
> 新規にフォルダをA、AA、AB、B、BA、C、・・・といったように作成して実験しました。
> ・作成する順番をいろいろ変えてみる
> ・例えば、A、B、Cと作ってBを削除してみる
> ・例えば、A、B、Cと作って、A→C、C→Aとりネームしてみる
> ・他のフォルダで作ったフォルダを切り取ってコピーしてみる
> ・作ったフォルダの配下にファイルを置いてみる
> ・デフラグをしてみる(今回のデフラグはこのフォルダ事態に作用してないと思うので・・・検証の足しになりませんが)
> etcごちゃごちゃやってみましたが、Directory.GetDirectoriesの取得結果は昇順に並んでいるように見えました。
>
> #昇順っぽく取得されることがあるのかどうかの検証です。
>
> ちなみに、Directory.GetDirectoriesは内部でWindows APIのFindFirstFile関数、FindNextFile関数を
> 使っているわけですが、これらの関数のドキュメントにも取得順序についての記述は見当たりませんでした。
>
> ファイルシステムの仕様とかよく知らないので、これ以上の調査手段が思いつかない私にはお手上げですorz


丁寧な検証、有難うございました!
感謝です!
解決済み
引用返信 編集キー/
■40238 / inTopicNo.20)  Re[4]: System.IOでのフォルダの取得順序について
 
□投稿者/ Jitta on the way (404回)-(2009/08/21(Fri) 18:34:15)
2009/08/21(Fri) 18:34:55 編集(投稿者)

No40227 (らんぺるーる さん) に返信

> >みなさま
> 対応としては、GetDirectorieで取得した順序がそのまま表示されるという
> 仕様で問題ないという整理になりました。
> 今後、ファイル情報やフォルダ情報を取得する際には、取得順に気をつけようと
> 思います。


ふと、データベースで select した結果が昇順(登録した順)にならないという質問が、時々あることを思い出しました。
データの塊に順序はありません。データを取り出すのと、それを並べるのは別の処理だと思っておくのがいいでしょう。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -