• ベストアンサー

fopenで開いたファイルのサイズを取得したい

おはようございます。 Javaはそれなりに経験があるのですが、Cの経験は皆無に等しいものです。 FILE *fp; fp = fopen("C:\hoge.txt","r"); if(::GetFileSize(fp,NULL)>1000000){ ログをバックアップに格納し、新しいファイルを作る; } としたところ、ファイルの中身が空でもif文の中を通るようになってしまいました。 ファイルサイズがうまくとれていないようなのですが、どこに原因があるのでしょうか。 クイックウォッチをしようしても中の値が見れません。。。。。 環境はMicrosoft Visual Studio .NET 2003 + WinXPです。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • don_cha
  • ベストアンサー率34% (139/407)
回答No.1

ご質問の内容のプログラムでGetFileSizeは使えません。GetFileSizeを使用する場合、第一引数はCreateFileなどのAPIで取得できるファイルハンドルを使用します。 fopenの場合、ファイルディスクリプタですので、feof、fread、fseekなどを使用して、同様の機能を実現する必要があります。

ryou0607
質問者

お礼

MFCのCFileクラスを使うというところまでわかりました。fopenじゃダメなんですね(同様の機能を実現できる気がしないです)。 MSDNのサンプルを見てもコメントは英語で書いてあるし。。。。 訳がわからなくなってきました^^;

その他の回答 (2)

  • shige_70
  • ベストアンサー率17% (168/946)
回答No.3

環境に依存せず一般的に使える方法を紹介します。 int fd ; struct stat st ; fd = fileno(fp) ; fstat(fd,&st) ; st.st_size が求めるファイルサイズです。

  • don_cha
  • ベストアンサー率34% (139/407)
回答No.2

追加情報です。 参考URLにfopenしたファイルのサイズ取得にまつわる話があります。

参考URL:
http://f1.aaacafe.ne.jp/~pointc/log972.html
ryou0607
質問者

お礼

ありがとうございます。 タイトルにfopenで~とありますが、fopenしか知らなかっただけなので、CFileを使ってみたところうまく行きそうな感じです(コンパイルはできました)。

関連するQ&A