确定已编译二进制文件的长度

时间:2013-06-29 05:54:34

标签: c++

我正在尝试访问程序的已编译二进制文件的长度,但它返回-1。有人能指出我走在正确的轨道上吗?我不确定为什么下面的代码没有产生正确的结果。

std::fstream file(argv[0], std::ios::binary | std::ios::ate);
std::cout << file.tellg() << "\n";

2 个答案:

答案 0 :(得分:1)

结果为-1表示打开失败。你应该总是测试一下:

if (std::fstream file(argv[0], std::ios::binary | std::ios::ate)) {
    std::cout << file.tellg() << "\n";
} else {
    // Report error.
}

第二个问题是,如果你只是想获得它的长度,你应该打开它只读(这可能是开放失败的原因):

std::ifstream file(argv[0], …);

第三个问题是argv[0]不能保证包含有效的可执行文件名。这只是一个广泛持有的假设。你通常会逃避它,但你应该记住它。

答案 1 :(得分:1)

只需将std::ios::in添加到打开模式标志即可使其适用于我。 (构造函数无法打开文件。根据标准,您必须指定inoutapp之一。)

将流类型更改为std::istream也可以,但生成的二进制文件大8个字节。