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

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

 詳しくはこちら



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

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


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

No.19787

ファイル情報の取得
投稿者---カフェイン(2005/02/08 20:18:11)


はじめまして。

C言語の勉強として、ファイル処理を行っています。
17章を見て、ファイルの内部を操作する方法はわかったのですが、ファイルそのものを操作する方法がわかりません。
やりたいことは、
1.ファイルの情報を取得する(作成日時など)
2.ファイルをコピーする
3.ファイルを移動する
4.ファイルを削除する
です。
アドバイスなどお願いします。

環境はWindowsXPでフリーソフトのgccを使っています。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:ファイル情報の取得 19791 ナナシー 2005/02/08 23:57:46


No.19791

Re:ファイル情報の取得
投稿者---ナナシー(2005/02/08 23:57:46)


ファイル操作はいろいろとやりかたがあります。
ファイルの属性を取得したいのであれば、statをいう関数があります。
後は、自分のセンスで作成できると思います。
がんばってください。


この投稿にコメントする

削除パスワード

No.19807

Re:ファイル情報の取得
投稿者---カフェイン(2005/02/09 21:47:34)


>ファイル操作はいろいろとやりかたがあります。
>ファイルの属性を取得したいのであれば、statをいう関数があります。
>後は、自分のセンスで作成できると思います。
>がんばってください。

ナナシーさん。
アドバイスありがとうございます。
statについて調べて、ソースを書き換えてみたのですが、コンパイラが通りません。
サンプルを参考にして記述したのですが、何か勘違いしているのでしょうか?

----- ソース -----
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>

int main()
{
  int i;
  int cnt;
  int rtncd;
  /* ↓ここに追加 */
  struct _stat status;
  char data[200][100];
  FILE *fp_r, *fp_w;

  /*-- ファイル書込み --*/
  fp_w = fopen("C:\\Work\\Tmp\\writedata.dat", "w");
  for (i = 1; i < 100; i++) {
    fprintf(fp_w, "%.3d,%.6d\n", i, i * 3);
  }
  fclose(fp_w);

  /*-- ファイル読込み --*/
  /*-- ファイルが存在することをチェックする --*/
  /* ↓ここに追加 */
  rtncd = _stat("C:\\Work\\Tmp\\writedata.dat", &status);
  if (0 == rtncd) {

    fp_r = fopen("C:\\Work\\Tmp\\writedata.dat", "r");

    cnt = 0;
    while (1) {
      if (NULL == fgets(data[cnt], 100, fp_r)) {
        fclose(fp_r);
        break;
      }
      cnt++;
    }

    /*-- ファイルを加工して再度書込み --*/
    fp_w = fopen("C:\\Work\\Tmp\\writedata2.dat", "w");
    /*-- 取得したファイル情報を付加 --*/
    /* ↓ここに追加 */
    fprintf(fp_w, "AccessTime:%d\n\n", status.st_atime);
    for (i = cnt - 1; i != -1; i--) {
      fprintf(fp_w, "%s", data[i]);
    }
    fclose(fp_w);

  } else {
    printf("Error:No File\n");
    return(-1);
  }

  return (0);

}



----- エラー -----
file.c: In function `main':
file.c:10: error: storage size of `status' isn't known
------------------



この投稿にコメントする

削除パスワード

No.19808

Re:ファイル情報の取得
投稿者---もぐりん(2005/02/10 08:13:10)


提示したソースをVC++でコンパイルしたら普通にコンパイルできてしまいました。
たしかにgccの場合、構造体の宣言で_statだとコンパイルエラーになりましたが、statに修正したらコンパイルが通りました。
コンパイラによって仕様が微妙に違っているのだと思います。


この投稿にコメントする

削除パスワード

No.19835

Re:ファイル情報の取得
投稿者---KING・王(2005/02/11 00:47:10)


>提示したソースをVC++でコンパイルしたら普通にコンパイルできてしまいました。
>たしかにgccの場合、構造体の宣言で_statだとコンパイルエラーになりましたが、statに修正したらコンパイルが通りました。
>コンパイラによって仕様が微妙に違っているのだと思います。

関数の先頭が'_'(アンダーバー)の関数は、環境依存の関数だったと思います。


この投稿にコメントする

削除パスワード

No.19836

Re:ファイル情報の取得
投稿者---南野骨茶(2005/02/11 00:59:51)


>関数の先頭が'_'(アンダーバー)の関数は、環境依存の関数だったと思います。

それはそうかもしれませんが、今回は構造体の宣言が
struct statかstruct _statか、という話です。
関数の話をしているのではないはずです。


この投稿にコメントする

削除パスワード

No.19936

Re:ファイル情報の取得
投稿者---カフェイン(2005/02/14 19:33:36)


カフェインです。
アドバイスありがとうございます。
連休+αを利用して、旅に出ていたので、返信が遅れました。すみません。

_statをstatに修正したら、コンパイル通りました。
環境依存については、一度調べてみます。

ありがとうございました。


この投稿にコメントする

削除パスワード

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