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()){
// 省略
}
}
> 必ず若い順にとってくるのでしょうか?
んなことはないです。
単にファイルシステム上のエントリー順になると思います。
試した時はたまたまそういう順番にエントリーされていたんでしょう。
それを期待したコーディングをしていると状況によって結果が変わるので
ソートした状態がほしいのであれば、取得したファイル名を元にソートし
ないと駄目です。
> 必ず若い順にとってくるのでしょうか?
ファイルシステムがNTFSだとそうなります。
FATだとエントリ順になります。
NTFSってそうなるんですか。実際にやってみるべきだったな。
今使っているPCはNTFSだったはずだから。
まあ、ファイルシステムがFATかNTFSかで処理切り替えるのも面倒ですし、
NTFS限定のプログラムならまだしも、普通は自前でソートするでしょうねぇ。
今のPCなら対して処理速度も違わないだろうし。
よく考えたらファイルシステムがNTFSのときだけフラグでも立てといて
ファイル名順の時はソートなしで処理すればいいだけですね。
目を見張るほど早くはならないかもしれないけれど、
やってみてもいいかもしれないですね。
ひとつのディレクトリに格納されたファイルの数なんざ高々数百のオーダーでしょうから、ソー
トしたところで然程の時間はかからんのとちゃいますやろか。std::setにでもぶっこめば一発
やし。
>ファイルシステムがNTFSだとそうなります。
>FATだとエントリ順になります。
MSDNをざっと調べたのですが、そのような記述は見つけられませんでした。
できれば出典をお教え願えませんでしょうか。
#不確かな情報でプログラミングするのは危険でしょう。
>>ファイルシステムがNTFSだとそうなります。
>>FATだとエントリ順になります。
>MSDNをざっと調べたのですが、そのような記述は見つけられませんでした。
>できれば出典をお教え願えませんでしょうか。
やってみればわかる事です。
>#不確かな情報でプログラミングするのは危険でしょう。
喧嘩売ってます?
FATでは使えません。ではPGとしてはNGですからどのみちソートは必要でしょう。
επιστημηさんも言っているようにたいしたコストでもないし。
>> 必ず若い順にとってくるのでしょうか?
>んなことはないです。
では説明不足だと思ったので補足しただけです。
> やってみればわかる事です。
やってみても「たまたまそうなった」ということが、プログラミングでは多々あります
でしょう。
仕様として明言されていない限り、100万回試行して 100万回そうなったとしても、「た
ぶんそうなるんだろう」としか言えません。
Webを検索かけてみましょう。
それなりの情報は出てきますよ。
とりあえず参考になりそうなところはこんな所。
B+ツリーで格納と言う所。
http://www.atmarkit.co.jp/icd/root/13/14575813.html
Bツリーの説明
http://www.atmarkit.co.jp/icd/root/66/98827866.html
>#不確かな情報でプログラミングするのは危険でしょう。
この発言は不適切ですよ。
書かれている内容がおかしいと言う確信があるならともかく、
出展を聞いているくらいなのだから確信はないわけですよね。
出展をお聞かせくださいで止めておくべきです。
まあ、一言言いたいというのであれば、
出展がわからないと不安なのでとかの方が角が立ちますまい。
私の不用意な発言が通りすがりさんに不快な思いをさせてしまいました。
大変申し訳ありませんでした。
>出展をお聞かせくださいで止めておくべきです。
PATIOさん。フォローありがとうございます。
確かに不適切な発言でした。今後、十分気をつけたいと思います。
いろんな意見を頂き有難うございます。
何回やっても、NTFSの場合、若い順にソートされるのですが、
何をしらべても、NTFSの場合そうなると書いてありませんでした。
やはり、プログラムでソートし、出展が明確になり次第ソートを
やめようと思います。
そのときは、皆さんにもお伝えしようと思います。
有難うございました。
>B+ツリーで格納と言う所。
> http://www.atmarkit.co.jp/icd/root/13/14575813.html
>Bツリーの説明
> http://www.atmarkit.co.jp/icd/root/66/98827866.html
せっかく頂いたコメントですが、すべて読んでいませんでした。
NTFSの場合は、かならずソートされると言うことがわかりました。
WINDOWSNTでのみ動かすことがわかっているので、プログラムで
ソートする必要はないので、ソートしないことにします。
ありがとうございました。