0

我正在尝试使用提供的代码计算文件的大小,并将结果传递给我的文件对象。它只会在具有特定扩展名的情况下传递文件大小,这个函数完美地工作,我遇到的唯一问题是 ifile.tellg() 为每个文件大小传入 -1 的文件大小。

void NonRecursiveProcess(string directory)
{
    for(directory_iterator dir_end, dir(directory); dir != dir_end; ++dir) 
    { 
        path _path(*dir); 
        if(!is_directory(_path)) 
        { 
            for ( vector<ExtensionAbstract*>::iterator it = extensionsAbstract.begin() ; it != extensionsAbstract.end(); ++it)
            {
                if ( _path.file_string().substr(_path.file_string().find_last_of(".") + 1) == (*it)->GetExtension())
                {
                    std::ifstream ifile(_path.file_string(), std::ifstream::in | std::ifstream::binary );
                    ifile.seekg(0, std::ios_base::end);
                    (*it)->AddkB(ifile.tellg());
                    (*it)->AddFileCount();
                }
            }
        } 
    } 
}`
4

2 回答 2

0

也许stat会很有用(我知道这不是标准的)。

无论如何,这应该是函数的签名

void NonRecursiveProcess(const string &directory)

将有助于您的程序的性能。

于 2013-04-15T17:46:21.500 回答
0

如果 ifstream 处于失败状态,则 istream::tellg() 返回 -1。fail 可以在 seekg() 中设置,或者更有可能在构造函数中设置——在构造之后检查 ifile 状态以查看它是否实际打开。您可能会被拒绝访问、名称传递中的错误或其他问题。

一种可能的错误来源:是不是_path.file_string()只返回没有绝对路径的文件名?如果是这样,ifile 构造函数可能会给你“找不到文件”。

否则, 和 的组合ifile.seekg(0,std::ios_base::end);应该ifile.tellg();在任何二进制文件上按预期工作,给出文件大小。

于 2013-04-15T18:15:18.973 回答