9

ファイルのバイトサイズを決定する必要があります。

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

このささいな必要性には、明らかにささいな解決策はありません。

4

6 に答える 6

11

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();
于 2010-03-11T10:33:36.960 に答える
6

statシステムコールを使用できます。

#ifdef WIN32 
_stat64()
#else
stat64()
于 2010-03-11T12:04:58.630 に答える
2

ファイルサイズだけが必要な場合、これは確かにやり過ぎですが、一般的に、プラットフォームに依存しないファイル操作にはBoost.Filesystemを使用します。それが含む他の属性関数の中で

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

リファレンスはこちらにあります。Boost ライブラリは巨大に見えるかもしれませんが、多くの場合非常に効率的に実装できることがわかりました。必要な機能のみを抽出することもできますが、Boost はかなり複雑であるため、これは困難な場合があります。

于 2010-03-11T11:41:44.107 に答える
0

シンプル:

std::ifstream ifs; 
ifs.open("mybigfile.txt", std::ios::bin); 
ifs.seekg(0, std::ios::end); 
std::fpos pos = ifs.tellg();
于 2010-03-11T10:34:29.837 に答える
-1

多くの場合、最も移植性の高い方法で処理を実行したいと考えていますが、特定の状況、特にこのような状況では、最高のパフォーマンスを得るためにシステム API を使用することを強くお勧めします。

于 2010-03-11T12:11:31.067 に答える
-1

移植性を確保するには、最小公倍数の 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;
}
于 2010-07-30T17:28:37.683 に答える