ハードドライブの取得に関して

[戻る]
2005/01/25(火) 20:53:39
こんにちは
ハードディスクドライブを取得する方法について質問があります

環境は
WinXP、VC++6.0、MFC使用です

現在、ツリービューにフォルダの一覧を表示させる処理を作っています
最上位のアイテムはデスクトップではなく、
ハードディスクドライブ(複数の場合あり)にし、
その下にそれぞれのドライブに存在するフォルダを入れていくような感じです

[C:\]
   Folder01
      SubFolder01
      SubFolder02
      SubFolder03
   Folder02
      SubFolder01
[D:\]
   Folder01
      SubFolder01
      SubFolder02

イメージとしてはこのような感じです

そこでまずパソコンに存在するハードディスクドライブを取得しようと思い
調べてみたところ、
GetLogicalDrivesという関数を使って使用可能なドライブを取得することはできました

しかしこれらのドライブにはDVDやフロッピーなどのドライブも含まれており、
この中からハードドライブだけを取り出す必要が出てきました

そこでGetDriveTypeという関数を見つけ、以下のようにしてみました
ちなみにTreeはCTreeCtrlの参照です

DWORD    dwDrives    = GetLogicalDrives();
CString    str;
int    nCnt;

for(nCnt=0;nCnt<32;nCnt++){
    if(dwDrives&(1<<nCnt)){
        str.Format("%c:\\",'A'+nCnt);
        if(GetDriveType(str) == DRIVE_FIXED)   //気になる部分
            Tree.InsertItem(str);
    }
}

これによって結果としては少なくともわたしのパソコンでは望む結果となりました
しかしひとつだけ気になる点がありまして、それに関して質問があります

if(GetDriveType(str) == DRIVE_FIXED)

この部分なのですが、
これはハードディスクドライブを判別する方法として適切でしょうか?
ヘルプを見ても

DRIVE_FIXED … ドライブからディスクを抜くことができません。

という説明なので、ハードディスクと限定されているのかわかりません
わたしの知る限りではディスクを抜くことができないドライブというものは
ハードディスクぐらいしかないのですが、もしかしたら他にもあるのでしょうか?

もっともフォルダをツリー状に表示するという機能を考えれば、
もしハードディスク以外に存在したとしてもファイルを保存してあるという機能を
備えているならば検出されてもらったほうがいいのかもしれませんが・・・

以上が質問内容です
どなたかわかる方お願いいたします

KING・王 2005/01/26(水) 08:02:59
> わたしの知る限りではディスクを抜くことができないドライブというものは
> ハードディスクぐらいしかないのですが、もしかしたら他にもあるのでしょうか?

組込み系などで使用したりするのですが、CFカードやATAカードなどを起動ドライブとして
いる場合は、
こられはハードディスクではないが、ディスクを抜くことができないドライブとなるのはないで
しょうか?
(未確認です。)

ただ、上記のような場合に、憂さんも書かれているように、ハードディスクと区別する必要性は
あまり考えられませんから、
特に気にする必要はないではないでしょうか?

2005/01/26(水) 11:55:48
[[解決]]
こんにちは
KING・王さん、レスありがとうございます

> CFカードやATAカードなどを起動ドライブとしている場合

なるほど、未確認ということですがそういう可能性も考えられるのですね
CFカードやATAカードというものが具体的にどういうものかわかりませんが、
簡単に調べてみた限りではメモリーカードのようなものと理解していいのでしょうか

ともあれ、やはりそういった場合を考えるとやはり検出されるべきでしょうね
実際に検出できるかどうかは試すことができませんが、
今は現状の手法で進めて行こうと思います

どうもありがとうございました

KING・王 2005/01/26(水) 12:59:58
> CFカードやATAカードというものが具体的にどういうものかわかりませんが、
> 簡単に調べてみた限りではメモリーカードのようなものと理解していいのでしょうか

はい、CFカードはコンパクトフラッシュそのものです。
一般に販売されているものでは無理なようですが、内部構造とボードの組み合わせによっては、
そのCFカードからのOSの起動が可能です。
(WindowsXPが起動できます。)

組込み系のシステムでは、HDDのような物理的な故障の可能性が高いものは、
怖くて使用できませんので、物理的な故障の可能性が少ないコンパクトフラッシュなどを、
HDDの代わりに搭載させたりすることもあります。

ATAカードは、Type2のPCカードサイズのフラッシュメモリカードです。
たしか、Panasonicで販売していたはずです。
(PanasonicのHPでATAで検索をかければ見つかったと思います。)

そういえば、昔、一部のThinkPadがATAカードから起動できたとか聞いたことがあります
が。。。
(真偽の程はわかりません。)

以上、雑学のようなないようになってしまいました。

2005/01/26(水) 14:59:44
こんにちは
解決チェック済みにも関わらずレスありがとうございます

> CFカードはコンパクトフラッシュそのものです。

あ、なるほど・・・
つまり「CF」は「CompactFlash」の頭文字(なのかな?)だったんですか
言われてみればという感じですが頭の中で結びつきませんでした

ATAというものも、つまりはフラッシュメモリの一種なんですね
こういったものも起動ドライブにすることが可能だとは少し驚きでした
パソコンの世界は広く果てしない・・・ということですね、ちょっと謎っぽいですが

さておき、こんな素朴な疑問にも丁寧な回答、感謝します
参考になりました

また何か質問することがあるかと思いますが、
その際もみなさんよろしくお願いします

ではこれにて失礼します

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