0

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

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

2 回答 2

1

只需添加std::ios::in到打开模式标志就可以了。(构造函数未能打开文件。根据标准,您必须指定inout或之一app。)

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

于 2013-06-29T06:07:01.687 回答
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]不保证包含有效的可执行文件名称。这只是一个广泛持有的假设。你通常会逃脱它,但你应该记住它。

于 2013-06-29T06:05:59.360 回答