はじめまして!!けいこと申します。。
VC++初心者なので簡単な質問で申し訳ないのですが、
どなたか知っている方お教え下さい。
ファイルポインタでファイルサイズを取得したいのですが、
何か便利な関数があったりするのでしょうか?
-----------------------------------------------
例:
if( (fd = open ( fname , 3 ) ) < 0 )
{
/* ファイルオープンエラー */
return -2 ;
}
fsize = ???(fd)
-----------------------------------------------
???にあたる関数を教えて頂けないでしょうか。
環境⇒VC++6.0でOSはWindowsNTです。
宜しくお願い致します。
ファイルポインタでやるなら
FILE *fp=fopen(fn,rb);
fseek(fp,0,SEEK_END); /* ファイルの末尾にシーク */
size=ftell(fp)+1; /* 現在の位置を取得 */
rewind(fp); /* ファイル先頭にまき戻す */
という感じですね。ただ、VC++(Win32)なら
CreateFileで取得したハンドルでGetFileSize
した方が簡単でしょう。
宍戸 輝光さん回答ありがとうございます!!
下記の処理で上手くいきました。
例Start--------------------------
int fd ;
long fsize ;
fd = open ( c:\\dummy.txt , _O_RDWR );
fsize=lseek (fd , 0 , SEEK_END); /* 末尾に移動*/
lseek (fd , 0 , SEEK_SET); /* 先頭に移動*/
例End--------------------------
・・が、またまた質問なのですが、
もしlseekを使用せずに何か別の方法があれば教えて頂けないでしょうか。
(ひつこくてすみません!!)
open処理の後に
fsize = ???(fd)
の???にあたる関数ってGetFileSize以外に
あるのでしょうか。。
GetFileSizeはopenの時には使用出来なかったので・・・。
(やっぱり無いのかな?)
心あたりがあればで全然結構ですので。
これで出来ると思いますが、詳しくはHELPで調べて勉強しましょう
CFileStatus statusAf; // ファイル情報
IsAfFile = CFile::GetStatus(strGDTFullPath, statusAf); // 静的関数
ullNeed = statusAf.m_size; // ファイルサイズ
>宍戸 輝光 の方法
2GB以上のファイルサイズを得られませんけど、
その対策はどうしましょうか?
TAKAさんの方法でも上手くいきました。
みなさんどうもありがとうございました。。