CFileFindの順番

[戻る]
hasimoto 2004/12/07(火) 01:18:52
VC++6.0/Win200です。
カレントディレクトリにあるファイルは必ず「999.txt」のように
数値3桁+txtになっていて、最も若い数値のファイルを取得する方法を
考えています。
以下のように試したところ、最初に取得されるファイル名は最も若い数値
のファイルになりました。
CFileFindを使えば自らソートしなくても、必ず若い順にとってくるのでしょうか?
是非、ご教授下さい。お願いいたします。

CFileFind finder;
CString str;
BOOL bRet = finder.FindFile(_T(".\\*.*"));
while (bRet)
{
  bRet = finder.FindNextFile();
  str = finder.GetFileName();
  if(!finder.IsDots()){
    // 省略 
  }
}

tetrapod 2004/12/07(火) 08:55:59
> 必ず若い順にとってくるのでしょうか?
んなことはないです。

PATIO 2004/12/07(火) 10:13:05
単にファイルシステム上のエントリー順になると思います。
試した時はたまたまそういう順番にエントリーされていたんでしょう。
それを期待したコーディングをしていると状況によって結果が変わるので
ソートした状態がほしいのであれば、取得したファイル名を元にソートし
ないと駄目です。

通りすがり 2004/12/07(火) 13:47:32
> 必ず若い順にとってくるのでしょうか?
ファイルシステムがNTFSだとそうなります。
FATだとエントリ順になります。

PATIO 2004/12/07(火) 16:56:30
NTFSってそうなるんですか。実際にやってみるべきだったな。
今使っているPCはNTFSだったはずだから。
まあ、ファイルシステムがFATかNTFSかで処理切り替えるのも面倒ですし、
NTFS限定のプログラムならまだしも、普通は自前でソートするでしょうねぇ。
今のPCなら対して処理速度も違わないだろうし。

PATIO 2004/12/07(火) 16:58:58
よく考えたらファイルシステムがNTFSのときだけフラグでも立てといて
ファイル名順の時はソートなしで処理すればいいだけですね。
目を見張るほど早くはならないかもしれないけれど、
やってみてもいいかもしれないですね。

επιστημη [E-Mail] [HomePage] 2004/12/07(火) 18:00:15
ひとつのディレクトリに格納されたファイルの数なんざ高々数百のオーダーでしょうから、ソー
トしたところで然程の時間はかからんのとちゃいますやろか。std::setにでもぶっこめば一発
やし。

PineSeed 2004/12/08(水) 11:00:55
>ファイルシステムがNTFSだとそうなります。
>FATだとエントリ順になります。
MSDNをざっと調べたのですが、そのような記述は見つけられませんでした。
できれば出典をお教え願えませんでしょうか。

#不確かな情報でプログラミングするのは危険でしょう。

通りすがり 2004/12/08(水) 13:20:25
>>ファイルシステムがNTFSだとそうなります。
>>FATだとエントリ順になります。
>MSDNをざっと調べたのですが、そのような記述は見つけられませんでした。
>できれば出典をお教え願えませんでしょうか。
やってみればわかる事です。

>#不確かな情報でプログラミングするのは危険でしょう。
喧嘩売ってます?
FATでは使えません。ではPGとしてはNGですからどのみちソートは必要でしょう。
επιστημηさんも言っているようにたいしたコストでもないし。

>> 必ず若い順にとってくるのでしょうか?
>んなことはないです。
では説明不足だと思ったので補足しただけです。

シャノン 2004/12/08(水) 13:37:30
> やってみればわかる事です。

やってみても「たまたまそうなった」ということが、プログラミングでは多々あります
でしょう。
仕様として明言されていない限り、100万回試行して 100万回そうなったとしても、「た
ぶんそうなるんだろう」としか言えません。

PATIO 2004/12/08(水) 13:49:02
Webを検索かけてみましょう。
それなりの情報は出てきますよ。
とりあえず参考になりそうなところはこんな所。

B+ツリーで格納と言う所。
http://www.atmarkit.co.jp/icd/root/13/14575813.html

Bツリーの説明
http://www.atmarkit.co.jp/icd/root/66/98827866.html

>#不確かな情報でプログラミングするのは危険でしょう。
この発言は不適切ですよ。
書かれている内容がおかしいと言う確信があるならともかく、
出展を聞いているくらいなのだから確信はないわけですよね。
出展をお聞かせくださいで止めておくべきです。

PATIO 2004/12/08(水) 13:59:58
まあ、一言言いたいというのであれば、

出展がわからないと不安なのでとかの方が角が立ちますまい。

PineSeed 2004/12/08(水) 19:19:55
私の不用意な発言が通りすがりさんに不快な思いをさせてしまいました。
大変申し訳ありませんでした。

>出展をお聞かせくださいで止めておくべきです。
PATIOさん。フォローありがとうございます。
確かに不適切な発言でした。今後、十分気をつけたいと思います。

hasimoto 2004/12/09(木) 00:14:28
[[解決]]
いろんな意見を頂き有難うございます。
何回やっても、NTFSの場合、若い順にソートされるのですが、
何をしらべても、NTFSの場合そうなると書いてありませんでした。
やはり、プログラムでソートし、出展が明確になり次第ソートを
やめようと思います。
そのときは、皆さんにもお伝えしようと思います。
有難うございました。

hasimoto 2004/12/09(木) 00:49:24
>B+ツリーで格納と言う所。
>http://www.atmarkit.co.jp/icd/root/13/14575813.html

>Bツリーの説明
>http://www.atmarkit.co.jp/icd/root/66/98827866.html

せっかく頂いたコメントですが、すべて読んでいませんでした。
NTFSの場合は、かならずソートされると言うことがわかりました。
WINDOWSNTでのみ動かすことがわかっているので、プログラムで
ソートする必要はないので、ソートしないことにします。
ありがとうございました。

tetrapod 2004/12/09(木) 11:57:08
「常に NTFS だから」という理由なら正しいわけですが、
WinNT でも FAT フォーマットができるわけで、
「WinNT だから」という理由でソートしないのは間違いでしょう。
ネットワーク先のディレクトリを選ばれたときどうなるかとか、ちゃんと考慮してます?

たいした手間ではなしソートすることを強く推奨。

古いスレッドには追加発言できません。