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

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

 詳しくはこちら


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

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


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

No.21763

ファイル日時 で処理するかしないかを決定する方法
投稿者---たかし(2005/07/03 19:12:03)


はじめましてこんばんわ!

C言語を用いてファイルの更新日時をみて処理をするかしないか?
という処理を追加したいとおもっていますが、うまく作成できません。

ファイルの更新日時 :取得済み
比較する日時を入力 :作成済み

なのですが、
ファイルの更新日時とそのファイルを処理するかどうかを判定
させるところでうまいプログラムが作成できずに困っています。
よい方法があれば、教えてもらいたいのですが。

ファイルの更新日時 年:filetimeyear
月:filetimemonth
日:filetimedate
時:filetimehour
分:filetimeminutes
入力 年:inputyear
月:inputmonth
日:inputdate
時:inputhour
分:inputminutes

処理するかどうかを判定

if(filetimeyear >= inputyear &&
(filetimeyear == inputyear && filetimemonth >=inputmonth)
日 時間 分 は、分に単位を合わせて 比較)
とやっていたのですが、
2005年6月27日
2006年5月28日
について不整合が生じてしまい、処理を追加していく必要があります。

何か他に良い方法ありませんでしょうか?

#ウィンドウズで、フォルダで更新日時をクリックすると、
2005年6月27日
2005年6月28日
2006年1月1日
とソートしてくれていますが、このアルゴリズムに近いと思いますが、
自分ではうまいやり方がみつかりません。

以上です。ご回答お待ちしております。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ファイル日時 で処理するかしないかを決定する方法 21764 Blue 2005/07/03 22:05:12
<子記事> Re:ファイル日時 で処理するかしないかを決定する方法 21765 かずま 2005/07/04 00:18:25


No.21764

Re:ファイル日時 で処理するかしないかを決定する方法
投稿者---Blue(2005/07/03 22:05:12)


日付を比較する場合、time_t 型を扱うと楽になります。
年月日時間までわかっている場合、struct tm 型にそれぞれを代入し、
mktime関数を使って、time_t型に変換します。
比較時はtime_t型同士で比較します。
(time_t型には扱える範囲に制限があるので気をつけて)

参考
mktime



この投稿にコメントする

削除パスワード

No.21765

Re:ファイル日時 で処理するかしないかを決定する方法
投稿者---かずま(2005/07/04 00:18:25)


#include <stdio.h>

typedef struct { int year, mon, day, hour, min; } DateTime;

int timecmp(DateTime *a, DateTime *b)
{
    if (a->year < b->year) return -1;
    if (a->year > b->year) return  1;
    if (a->mon  < b->mon ) return -1;
    if (a->mon  > b->mon ) return  1;
    if (a->day  < b->day ) return -1;
    if (a->day  > b->day ) return  1;
    if (a->hour < b->hour) return -1;
    if (a->hour > b->hour) return  1;
    if (a->min  < b->min ) return -1;
    if (a->min  > b->min ) return  1;
    return 0;
}

int main(void)
{
    DateTime filetime = { 2005, 6, 27, 12, 00 };
    DateTime input    = { 2006, 5, 28, 12, 00 };
    int d = timecmp(&filetime, &input);

    if (d < 0)
        puts("filetime < input");
    else if (d > 0)
        puts("filetime > input");
    else
        puts("filetime == input");
    return 0;
}



この投稿にコメントする

削除パスワード

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