ファイルのバイトサイズを決定する必要があります。
コーディング言語は C++ で、コードは Linux、Windows、およびその他のオペレーティング システムで動作するはずです。これは、標準の C または C++ 関数/クラスを使用することを意味します。
このささいな必要性には、明らかにささいな解決策はありません。
ファイルのバイトサイズを決定する必要があります。
コーディング言語は 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()
ファイルサイズだけが必要な場合、これは確かにやり過ぎですが、一般的に、プラットフォームに依存しないファイル操作にはBoost.Filesystemを使用します。それが含む他の属性関数の中で
template <class Path> uintmax_t file_size(const Path& p);
リファレンスはこちらにあります。Boost ライブラリは巨大に見えるかもしれませんが、多くの場合非常に効率的に実装できることがわかりました。必要な機能のみを抽出することもできますが、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;
}