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


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

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

 詳しくはこちら


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

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


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

No.4562

_dos_findfirstでファイルの日時取得するには
投稿者---初心者(2005/08/26 14:22:36)


こんにちは。

現在、VCでコマンドプロンプトのDIRコマンドと同じ表示がされるように開発しています。

標準関数とMS_DOSシステムコールしか使ってはいけないそうです。

早速聞きたいのですが、
_dos_findfirst()という命令で、カレントディレクトリの内容を取得しています。

ファイル名、拡張子、サイズは、うまく表示されるのですが

日時がどうもおかしいのです。

取得されたデータは、構造体の中にある

unsigned wr_date(最終更新日)
unsigned wr_time(最終更新時間)

に格納されています。

wr_time中のデータ
ビット 内容
0〜4 2秒単位の秒数(0〜29)
5〜10 分(0〜59)
11〜15 時間(0〜23)

wr_date中のデータ
ビット 内容
0〜4 日(1〜31)
5〜10 月(1〜12)
11〜15 年(1980〜の相対年数)

このように書いています。

unsigned で指定されていたので、数値だとおもい

unsigned long に、wr_dateとwr_timeを保存して

printfで%lu表示を試みてます。

結果、わけの分からない数値になってしまって
どうしたものかと悩んでます。

多分、ビット表示がおかしいのか、計算をして表示しないといけないのかじゃないかとは思うのですがお手上げです。

誰か教えていただけませんか。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:_dos_findfirstでファイルの日時取得するには 4563 Blue 2005/08/26 14:39:19
<子記事> Re:_dos_findfirstでファイルの日時取得するには 4564 YuO 2005/08/26 14:39:21
<子記事> Re:_dos_findfirstでファイルの日時取得するには 4565 まきじ 2005/08/26 14:42:36


No.4563

Re:_dos_findfirstでファイルの日時取得するには
投稿者---Blue(2005/08/26 14:39:19)


> 多分、ビット表示がおかしいのか、計算をして表示しないといけないのかじゃないかとは思うのですがお手上げです。
計算してあげないといけません。

とりあえずGoogleで wr_time を検索。
http://www5a.biglobe.ne.jp/~espoir/id.c
ここにソースがありました。

どうしてこのようにして取得できるかは、一度ご自分で考えてみて、
わからなければ再度、どこがどうわからないか質問してください。

# 掲示板等で半角カタカナは使わないほうがいいです。



この投稿にコメントする

削除パスワード

No.4566

Re:_dos_findfirstでファイルの日時取得するには
投稿者---Blue(2005/08/26 15:11:20)


わかりやすく、unionとビットフィールドをつかって、

union tagTime
{
    unsigned int n_time;
    struct
    {
        unsigned int sec  : 5;
        unsigned int min  : 6;
        unsigned int hour : 5;
    } s_time;
};

てのもありかな。



この投稿にコメントする

削除パスワード

No.4567

Re:_dos_findfirstでファイルの日時取得するには
投稿者---初心者(2005/08/26 15:35:39)


># 掲示板等で半角カタカナは使わないほうがいいです。

今後気をつけます^^;

リンク先をじっくり読んで理解できました。
ありがとうございました。


この投稿にコメントする

削除パスワード

No.4564

Re:_dos_findfirstでファイルの日時取得するには
投稿者---YuO(2005/08/26 14:39:21)


>現在、VCでコマンドプロンプトのDIRコマンドと同じ表示がされるように開発しています。
>標準関数とMS_DOSシステムコールしか使ってはいけないそうです。

MS-DOSシステムコールを呼び出す方法なんて存在しませんが……。
まぁ,MS-DOSプログラムを呼び出してファイルに出力させ,そのデータを読み込むなら出来ないことがないですけどね。
# つーか,_dos_から始まる関数なんて,最近のVC++ライブラリには見つからないと思うのですが……。


>unsigned で指定されていたので、数値だとおもい
>unsigned long に、wr_dateとwr_timeを保存して
>printfで%lu表示を試みてます。
>結果、わけの分からない数値になってしまって
>どうしたものかと悩んでます。

その値をそのまま表示させたのですか?
説明を読む限り,それでは意味がありません。
特定のビット範囲を取り出して表示する必要があります。



この投稿にコメントする

削除パスワード

No.4565

Re:_dos_findfirstでファイルの日時取得するには
投稿者---まきじ(2005/08/26 14:42:36)


>wr_time中のデータ
>ビット 内容
>0〜4 2秒単位の秒数(0〜29) ← 1 ビットから 5 ビット目
>5〜10 分(0〜59) ← 6 ビットから 11 ビット目
>11〜15 時間(0〜23) ← 12 ビットから 16 ビット目

sec = wr_time & 0x0000001F;
wr_time = wr_time >> 5;

min = wr_time & 0x0000002F;
wr_time = wr_time >> 6;

hour = wr_time & 0x0000001F;

>wr_date中のデータ
>ビット 内容
>0〜4 日(1〜31) ← 1 ビットから 5 ビット目
>5〜10 月(1〜12)← 6 ビットから 11 ビット目
>11〜15 年(1980〜の相対年数) ← 12 ビットから 16 ビット目

day = wr_date & 0x0000001F;
wr_date = wr_date >> 5;

month = wr_date & 0x0000002F;
wr_date = wr_date >> 6;

year = wr_date & 0x0000001F;
year += 1980;

こんな感じでしょうか?


この投稿にコメントする

削除パスワード

No.4568

解決
投稿者---初心者(2005/08/26 15:36:47)


ありがとうございます。

Googleのリンク先と、こちらを見ながら理解できました。

助かりました^^


この投稿にコメントする

削除パスワード

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




掲示板提供:Real Integrity