4

バイナリ ファイルを読み込もうとしていて、そのサイズを確認する必要がありますが、試した方法に関係なく、サイズがゼロになっています。

例えば:

fstream cbf(address, ios::binary | ios::in | ios::ate);
fstream::pos_type size = cbf.tellg();                   // Returns 0.

char* chunk = new char[size];
cbf.read(chunk, size);
//...

以下を使用する場合:

#include <sys/stat.h>
struct stat st;
stat(address.c_str(),&st);
int size = st.st_size;

サイズはまだゼロです。以下も試しましたが、まだゼロです。

File* fp;
fp = open(address.c_str(), "rb");

ファイルのサイズを取得するにはどうすればよいですか?

回答ありがとうございます...問題を特定しました:アクセスしようとしていたバイナリファイルは実行中に作成され、読み取ろうとする前に閉じるのを忘れていました...

4

2 に答える 2

4

どちらの例も失敗をチェックしません。あなたの最初の方法を使用したこのプログラムは、私にとっては完璧に機能します。/etc/passwd のサイズと /etc/motd が存在しないことを正しく識別します。

#include <fstream>
#include <iostream>
#include <string>

void printSize(const std::string& address) {
  std::fstream motd(address.c_str(), std::ios::binary|std::ios::in|std::ios::ate);
  if(motd) {
    std::fstream::pos_type size = motd.tellg();
    std::cout << address << " " << size << "\n";
  } else {
    perror(address.c_str());
  }
}

int main () {
    printSize("/etc/motd");
    printSize("/etc/passwd");
}
于 2012-11-30T15:43:41.177 に答える
0

このメソッドでファイルをロードしてみてください。

注:この行ではifstreaminsted ofを使用しますfstreamifstream cbf(address, ios::binary | ios::in );

long size;
ifstream cbf(address, ios::binary | ios::in);
cbf.seekg(0, ios::end);
size=cbf.tellg();
cbf.seekg(0, ios::beg);

char* chunk = new char[size];
cbf.read(chunk, size);
于 2012-11-30T16:08:48.130 に答える