dポイントプレゼントキャンペーン実施中!

おはようございます。
Javaはそれなりに経験があるのですが、Cの経験は皆無に等しいものです。

FILE *fp;
fp = fopen("C:\hoge.txt","r");
if(::GetFileSize(fp,NULL)>1000000){
ログをバックアップに格納し、新しいファイルを作る;
}

としたところ、ファイルの中身が空でもif文の中を通るようになってしまいました。
ファイルサイズがうまくとれていないようなのですが、どこに原因があるのでしょうか。
クイックウォッチをしようしても中の値が見れません。。。。。
環境はMicrosoft Visual Studio .NET 2003 + WinXPです。
よろしくお願いいたします。

A 回答 (3件)

ご質問の内容のプログラムでGetFileSizeは使えません。

GetFileSizeを使用する場合、第一引数はCreateFileなどのAPIで取得できるファイルハンドルを使用します。

fopenの場合、ファイルディスクリプタですので、feof、fread、fseekなどを使用して、同様の機能を実現する必要があります。
    • good
    • 1
この回答へのお礼

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

お礼日時:2004/10/13 11:23

環境に依存せず一般的に使える方法を紹介します。



int fd ;
struct stat st ;

fd = fileno(fp) ;
fstat(fd,&st) ;

st.st_size が求めるファイルサイズです。
    • good
    • 0

追加情報です。



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

参考URL:http://f1.aaacafe.ne.jp/~pointc/log972.html
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/10/13 11:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!