C言語関係掲示板

過去ログ

No.543.ファイル情報(更新日付)の取得方法

[戻る] [ホームページ]
No.4596

ファイル情報(更新日付)の取得方法は?
投稿者---ごっちん(2003/01/24 09:57:45)
http://www.otodemo.net


はじめまして.
Cはほどんど初心者のごっちんと申します.

Win上のファイルの更新日付を取得するには
どのようにしたらよいのでしょうか?

UNIXでは”stat.h?”とかでできると書いてるのは検索に引っかかるのですが...

ふつつかものですが、どうかご教授のほどよろしくお願いします.


No.4600

Re:ファイル情報(更新日付)の取得方法は?
投稿者---kikk(2003/01/24 12:09:19)


ども。


ヘッダ(stat.h)で実現できるのではなく、その中の関数(stat()等)でできます。
で、DOS/Win系のコンパイラにもstat.hは多分あります。sys/stat.hかもしれません。
そこで宣言されているstat()かfstat()を使えばよろしいかと。
なお、stat()等はANSI Cの関数ではないのでであしからず(大抵使えますが)。
あと、少し前の「問題解決したはずだったのにぃ〜(><;)」という書き込みも
参考にしてください。


では。

No.4601

Re:ファイル情報(更新日付)の取得方法は?
投稿者---ごっちん(2003/01/24 13:49:45)
http://www.otodemo.net


アドバイスいただき、ありがとうございます.
で、いろいろ調べた結果、以下のような例をみつけ、
これだっと思い、動かしたのですが...

ぜんぜん違う日付(サイズもマイナスとか...)が表示されてしまいます

なぜでしょう?

#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>

void main( void )
{
  struct _stat buf;
  int result;
  char buffer[] = "A line to output";

  /* "stat.c" に関連付けられているデータを取得します。 */
  result = _stat( "D:/test/mkuma1-p.gif", &buf );

  /* ファイル状態情報が取得できたかのチェック */
  if( result != 0 )
    perror( "ファイルの情報を取得できませんでした" );
  else
  {
    /* 統計情報の一部を表示 */
    printf( "ファイルの大きさ : %ld\n", buf.st_size );
    printf( "ドライブ : %c:\n", buf.st_dev + 'A' );
    printf( "更新時刻 : %s", ctime( &buf.st_atime ) );
  }
}

どうか、第二ヒントをお願い致します.

No.4603

Re:ファイル情報(更新日付)の取得方法は?
投稿者---a(2003/01/24 15:33:56)



>ぜんぜん違う日付(サイズもマイナスとか...)が表示されてしまいます

ファイル情報のプログラムは書いたことがないので
間違ったヒントになるかもしれませんが、
以下のHPは参考になりませんでしょうか??

http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/

No.4609

Re:ファイル情報(更新日付)の取得方法は?
投稿者---ごっちん(2003/01/24 17:59:09)
http://www.otodemo.net


>ぜんぜん違う日付(サイズもマイナスとか...)が表示されてしまいます
すみません、紛らわしい書き方をしました.

マイナスとは、サイズとしてありえないでしょ!っということをお伝えしたかったのです.数値も同様に実際とは異なる値となってしまうのです.

たとえば先ほどのコードだと、
2002/11/1となるはずが1987/7/27と表示されたり、
926 バイトとなるはずが-76873728と表示されてしまいます.

ど〜して!!

追伸:先ほどお教え頂いたHP、とても為になります.ありがとうございました.

No.4613

Re:ファイル情報(更新日付)の取得方法は?
投稿者---かずま(2003/01/24 19:03:13)


> ぜんぜん違う日付(サイズもマイナスとか...)が表示されてしまいます
> なぜでしょう?

このページの先頭の「掲示板ご利用上の注意」に
「・なるべく詳しく環境などの情報をお書きください。」
と書いてありますよね。

OS名だけでなく、コンパイラの名前も書きましょう。

おそらく、Borland C++ Compiler をお使いですね。
プログラム中の 2個所の _stat を stat に変えると、正しく実行できるはずです。
そうすると、gcc や LSI C-86 でも、コンパイルでき、実行できるようになります。


「・ソースを添付する際には<pre>タグで字下げしてください。」

次からはこの注意にも従ってくださいね。

No.4631

ありがとうございました!
投稿者---ごっちん(2003/01/24 23:59:11)


>「・なるべく詳しく環境などの情報をお書きください。」
>「・ソースを添付する際には<pre>タグで字下げしてください。」

すみませんでした.太字で書いてあるのに...以後、気をつけます.
環境は、おさっしのとおり、BCC(5.5)です.

お教え頂いたとおり、2箇所の”_stat”を”stat”に直したら
正しく取得できるようになりました.

アドバイスを下さった方々、本当にありがとうございました.
また何かのときには、宜しくお願い致します.