質問

私は、ファイルのバイトサイズをdeterminする必要があります。

コーディング言語はC ++で、コードは、Linux、Windows、および他のオペレーティングシステムで動作するはずです。これは、標準のCまたはC ++の関数/クラスを使用して暗示ます。

この些細な必要性は明らかに全く自明な解を持っていません。

役に立ちましたか?

解決

あなたが使用することができますstdのストリームを使用します:

std::ifstream ifile(....);
ifile.seekg(0, std::ios_base::end);//seek to end
//now get current position as length of file
ifile.tellg();

あなたが書き込みを扱う場合にのみ(STD :: ofstreamの)ファイルを、その後の方法は、いくつかの他のです

ofile.seekp(0, std::ios_base::end);
ofile.tellp();

他のヒント

あなたはのstatシステムコールを使用することができます:

#ifdef WIN32 
_stat64()
#else
stat64()

あなただけのファイルサイズが必要な場合は、これは確かに行き過ぎですが、一般的に、私は<のhref = "http://www.boost.org/doc/libs/1_42_0/libs/filesystem/doc/indexとなるだろう。 HTM」のrel = "nofollowをnoreferrer"> Boost.Filesystem のプラットフォームに依存しないファイル操作のために。 他の属性の機能の中には含まれています。

template <class Path> uintmax_t file_size(const Path& p);

あなたは、参照を見つけることができますここを。 Boostライブラリが巨大に見えるかもしれませんが、私はそれは多くの場合、非常に効率的に物事を実装することが判明しました。ブーストはかなり複雑であるとして、あなたはまた、唯一のあなたが必要とする機能が、困難な証明この威力を抽出できます。

最も単純ます:

std::ifstream ifs; 
ifs.open("mybigfile.txt", std::ios::bin); 
ifs.seekg(0, std::ios::end); 
std::fpos pos = ifs.tellg();

多くの場合、我々は、ほとんどのポータブルな方法で物事を成し遂げるしたいのですが、特定の状況では、特にこのように、私は強く、最高のパフォーマンスのために、システムのAPIを使用することをお勧めします。

ポータビリティはC.(ないC ++)になり、少なくとも共通分母を使用する必要があります 私が使用する方法は以下の通りである。

#include <stdio.h>

long filesize(const char *filename)
{
FILE *f = fopen(filename,"rb");  /* open the file in read only */

long size = 0;
  if (fseek(f,0,SEEK_END)==0) /* seek was successful */
      size = ftell(f);
  fclose(f);
  return size;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top