- ベストアンサー
fopenで開いたファイルのサイズを取得したい
おはようございます。 Javaはそれなりに経験があるのですが、Cの経験は皆無に等しいものです。 FILE *fp; fp = fopen("C:\hoge.txt","r"); if(::GetFileSize(fp,NULL)>1000000){ ログをバックアップに格納し、新しいファイルを作る; } としたところ、ファイルの中身が空でもif文の中を通るようになってしまいました。 ファイルサイズがうまくとれていないようなのですが、どこに原因があるのでしょうか。 クイックウォッチをしようしても中の値が見れません。。。。。 環境はMicrosoft Visual Studio .NET 2003 + WinXPです。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ご質問の内容のプログラムでGetFileSizeは使えません。GetFileSizeを使用する場合、第一引数はCreateFileなどのAPIで取得できるファイルハンドルを使用します。 fopenの場合、ファイルディスクリプタですので、feof、fread、fseekなどを使用して、同様の機能を実現する必要があります。
その他の回答 (2)
- shige_70
- ベストアンサー率17% (168/946)
環境に依存せず一般的に使える方法を紹介します。 int fd ; struct stat st ; fd = fileno(fp) ; fstat(fd,&st) ; st.st_size が求めるファイルサイズです。
- don_cha
- ベストアンサー率34% (139/407)
追加情報です。 参考URLにfopenしたファイルのサイズ取得にまつわる話があります。
お礼
ありがとうございます。 タイトルにfopenで~とありますが、fopenしか知らなかっただけなので、CFileを使ってみたところうまく行きそうな感じです(コンパイルはできました)。
お礼
MFCのCFileクラスを使うというところまでわかりました。fopenじゃダメなんですね(同様の機能を実現できる気がしないです)。 MSDNのサンプルを見てもコメントは英語で書いてあるし。。。。 訳がわからなくなってきました^^;