计算文件大小的c++

Figuring out the size of file C++

本文关键字:c++ 文件大小 计算      更新时间:2023-10-16

我试图找出使用提供的代码文件的大小,并将结果传递到我的文件对象。它只会传递文件大小,如果它是一个特定的扩展名,这个函数工作得很好,我遇到的唯一问题是文件大小,file.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();
                }
            }
        } 
    } 
}`

istream::tellg()返回-1如果ifstream处于失败状态。Fail可以在seekg()中设置,或者更可能的是在构造函数中设置——在构造之后检查文件状态,看看它是否实际打开了。你可能会被拒绝访问,名字中有错误或者其他什么。

一个可能的错误来源:是不是_path.file_string()只返回文件名没有绝对路径?如果是,文件构造函数会给你"file not found"。

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

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

无论如何,这应该是函数

的签名
void NonRecursiveProcess(const string &directory)