←検索窓の楽しみ方
  ショッピングモール  掲示板ランキング


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※返信付き投稿の削除は禁止!
 ※マルチポスト(多重投稿)は慎んで!

 詳しくはこちら


 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.4540

ハードディスクの容量の求め方
投稿者---初心者(2005/08/25 16:52:00)


現在、Cで開発をしているのですが
ハードディスクの求め方(式)が分かりせん。

全容量と、空き容量を求めたいのです。

dos_getdiskfreeによってデータを取得。

分かってるデータ
ディスク上のクラスタ総数
ディスク上の使用可能なクラスタ数
1クラスごとのセクタ数
1セクタごとのバイト数

格納先
unsigned long youryou;

どなたか、全容量と空き容量を求める式を教えていただけませんか。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ハードディスクの容量の求め方 4541 まきじ 2005/08/25 17:03:12


No.4541

Re:ハードディスクの容量の求め方
投稿者---まきじ(2005/08/25 17:03:12)


>ディスク上のクラスタ総数
>ディスク上の使用可能なクラスタ数
>1クラスごとのセクタ数
>1セクタごとのバイト数

これだけ判ってたら、後は算数ですよね。

全体容量:一セクタのバイト数 * 1クラスタごとのセクタ数 * ディスクのクラスタ総数
空き容量:一セクタのバイト数 * 1クラスタごとのセクタ数 * ディスクの使用可能なクラスタ総数


この投稿にコメントする

削除パスワード

No.4542

Re:ハードディスクの容量の求め方
投稿者---初心者(2005/08/25 17:32:01)




>全体容量:一セクタのバイト数 * 1クラスタごとのセクタ数 * ディスクのクラスタ総数
>空き容量:一セクタのバイト数 * 1クラスタごとのセクタ数 * ディスクの使用可能なクラスタ総数

ありがとうございます。
しかし、自分のプログラムがおかしいのかもしれませんが
求めるべきデータとは違った数値で返ってきます。

訂正すべき点があれば教えてください。

現在、Dドライブの容量を調べようとしています。

APIは使わず、標準関数かMS_DOSシステムコールなどを使用。

Dドライブの現在の容量
総容量  約43G
空き容量 約42G

dos_getdiskfreeによって得たデータ
ディスク上のクラスタ総数     15747
ディスク上の使用可能なクラスタ数 15747
1クラスごとのセクタ数       127
1セクタごとのバイト数       512

抜粋して書き出します。

構造体の名前を変更
struct _diskfree_t drive;

保存域
unsigned long youryou = 0;
unsigned long aki = 0;

構造体の中身
ディスク上のクラスタ総数     drive.total_clusters 
ディスク上の使用可能なクラスタ数 drive.avail_clusters
1クラスごとのセクタ数      drive.sectors_per_cluster  
1セクタごとのバイト数     drive.bytes_per_sector 

計算
youryou = drive.bytes_per_sector * drive.sectors_per_cluster * drive.total_clusters;

printf("%ld\n",youryou);

結果 64000

43Gにはならず。電卓で計算しても1023932928

ややこしくてすいません。


この投稿にコメントする

削除パスワード

No.4543

Re:ハードディスクの容量の求め方
投稿者---まきじ(2005/08/25 18:02:13)


>しかし、自分のプログラムがおかしいのかもしれませんが
>求めるべきデータとは違った数値で返ってきます。

unsigned long の 最大値を超えているのでしょう。
最大値は、limits.h に ULONG_MAX に定義されています。

多倍長整数の計算が必要です。

# 電卓も 32bit までの計算しかできません。


この投稿にコメントする

削除パスワード

No.4544

Re:ハードディスクの容量の求め方
投稿者---REE(2005/08/25 18:06:13)


>dos_getdiskfreeによって得たデータ
>ディスク上のクラスタ総数     15747
>ディスク上の使用可能なクラスタ数 15747
>1クラスごとのセクタ数       127
>1セクタごとのバイト数       512

そのシステムコールが大容量HDDに対応していないのではないですか?


この投稿にコメントする

削除パスワード

No.4545

Re:ハードディスクの容量の求め方
投稿者---初心者(2005/08/25 18:14:12)


対応していないのかな・・・。

表示に関してですが、3桁カンマを入れようと思っているので

文字にしようと思っています。

文字型で表示できれば、そちらでもかまいません。


この投稿にコメントする

削除パスワード

No.4548

Re:ハードディスクの容量の求め方
投稿者---まきじ(2005/08/25 21:07:21)


>文字型で表示できれば、そちらでもかまいません。

計算は数値でないとできません。

> # 電卓も 32bit までの計算しかできません。

は間違いです。
10 進数の計算の有効桁数は 32 桁まですので、
512 * 127 * 15747 の計算は 32 桁に納まるので
電卓で計算して合わないという事は、dos_getdiskfree() の
結果が間違ってる事になります。
間違ってる原因としては、REE さんが仰ってる様に
dos_getdiskfree() は大容量に対応していないのでしょう。


この投稿にコメントする

削除パスワード

No.4561

Re:ハードディスクの容量の求め方
投稿者---初心者(2005/08/26 11:49:46)


>間違ってる原因としては、REE さんが仰ってる様に
>dos_getdiskfree() は大容量に対応していないのでしょう。

なるほど、それについては調べてみます。

ありがとうございました。
また、分からなくなったら聞きにこようと思います。

そのときはよろしくお願いします 汗


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧




掲示板提供:Real Integrity