ファイルサイズの取得

[戻る]
けいこ 2002/01/28(月) 18:18:31
はじめまして!!けいこと申します。。
VC++初心者なので簡単な質問で申し訳ないのですが、
どなたか知っている方お教え下さい。

ファイルポインタでファイルサイズを取得したいのですが、
何か便利な関数があったりするのでしょうか?
-----------------------------------------------
例:
if( (fd = open ( fname , 3 ) )  < 0  )
{
  /* ファイルオープンエラー    */
  return -2 ;
}

fsize = ???(fd)
-----------------------------------------------

???にあたる関数を教えて頂けないでしょうか。
環境⇒VC++6.0でOSはWindowsNTです。
宜しくお願い致します。

宍戸 輝光 [E-Mail] [HomePage] 2002/01/28(月) 19:10:43
 ファイルポインタでやるなら

FILE *fp=fopen(fn,"rb");

fseek(fp,0,SEEK_END); /* ファイルの末尾にシーク */
size=ftell(fp)+1;     /* 現在の位置を取得 */
rewind(fp);           /* ファイル先頭にまき戻す */

 という感じですね。ただ、VC++(Win32)なら
CreateFileで取得したハンドルでGetFileSize
した方が簡単でしょう。

けいこ 2002/01/29(火) 11:23:41
宍戸 輝光さん回答ありがとうございます!!
下記の処理で上手くいきました。
例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の時には使用出来なかったので・・・。
(やっぱり無いのかな?)

心あたりがあればで全然結構ですので。

TAKA 2002/01/29(火) 11:57:11
これで出来ると思いますが、詳しくはHELPで調べて勉強しましょう

CFileStatus statusAf;    //    ファイル情報
IsAfFile = CFile::GetStatus(strGDTFullPath, statusAf);   // 静的関数
ullNeed = statusAf.m_size;       // ファイルサイズ

coshat 2002/01/29(火) 12:43:48
>宍戸 輝光 の方法

2GB以上のファイルサイズを得られませんけど、
その対策はどうしましょうか?

けいこ 2002/01/29(火) 16:36:47
[[解決]]
TAKAさんの方法でも上手くいきました。
みなさんどうもありがとうございました。。

古いスレッドには追加発言できません。