CFileFindの順番 – プログラミング – Home

通知
すべてクリア

[解決済] CFileFindの順番

固定ページ 1 / 2

hasimoto
 hasimoto
(@hasimoto)
ゲスト
結合: 20年前
投稿: 6
Topic starter  

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
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

> 必ず若い順にとってくるのでしょうか?
んなことはないです。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

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


返信引用
通りすがり
 通りすがり
(@通りすがり)
ゲスト
結合: 24年前
投稿: 92
 

> 必ず若い順にとってくるのでしょうか?
ファイルシステムがNTFSだとそうなります。
FATだとエントリ順になります。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

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


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

ひとつのディレクトリに格納されたファイルの数なんざ高々数百のオーダーでしょうから、ソー
トしたところで然程の時間はかからんのとちゃいますやろか。std::setにでもぶっこめば一発
やし。


返信引用
PineSeed
 PineSeed
(@PineSeed)
ゲスト
結合: 20年前
投稿: 3
 

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

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


返信引用
通りすがり
 通りすがり
(@通りすがり)
ゲスト
結合: 24年前
投稿: 92
 

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

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

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


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

> やってみればわかる事です。

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

Webを検索かけてみましょう。
それなりの情報は出てきますよ。
とりあえず参考になりそうなところはこんな所。

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

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

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


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

まあ、一言言いたいというのであれば、

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


返信引用
PineSeed
 PineSeed
(@PineSeed)
ゲスト
結合: 20年前
投稿: 3
 

私の不用意な発言が通りすがりさんに不快な思いをさせてしまいました。
大変申し訳ありませんでした。

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


返信引用
hasimoto
 hasimoto
(@hasimoto)
ゲスト
結合: 20年前
投稿: 6
Topic starter  

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


返信引用
hasimoto
 hasimoto
(@hasimoto)
ゲスト
結合: 20年前
投稿: 6
Topic starter  

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

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

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


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました