使用c ++查找文件大小

cha*_*ilk 1 c++ printing filenames header filesize

更多的问题,我真的很困惑,而且我一直困扰着我,我几乎用dirent.h尝试了所有的东西.但这是我想要的一个例子:

#include <iostream>
#include "DataEventResponseMsg.idl"
using namespace std;

int main(){
    cout << "This is the size: " << sizeof(DataEventResponseMsg) << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它做的是包括该特定文件并找到它的大小并打印它.我想这样做,但我需要它打开一个充满.idl文件的目录,并使用sizeof打印它的文件和大小.

我试图用dirent.h做这个并打开目录,然后将内容放入ent-> d_name,然后查找d_name的sizeof等等,但所有这一切都是打印指针的大小..我尝试将文件放入一个数组,但执行sizeof只打印数组的大小.我希望它打印实际文件的大小,就像我将它们包含在头文件中一样,就像我发布的文件一样.

这有可能吗?我很困惑,我需要让它工作,但我需要帮助.

请帮忙.

编辑------

所以我用dirent.h完成了这个:

#include <iostream>
#include <dirent.h>
#include <string.h>
#include <fstream>

using namespace std;

int main( int argc, char* argv[] ){
char FileArr[20][256];
DIR *dir;
FILE *fp;
int i = 0;
int k;
struct dirent *ent;

dir = opendir (argv[1]);
if( dir != NULL ){
    while(( ent = readdir ( dir ) ) != NULL ){
        strcpy( FileArr[i], ent->d_name );
        fp = fopen( FileArr[i], "rw" );
        cout << FileArr[i] << ", " << sizeof(FileArr[i]) << endl;
        fclose(fp);
        i++;
    }
    closedir( dir );
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)

这从命令行打开了目录,它将内容放入ent-> d_name,然后我将这些字符串复制到一个数组中,并试图找到数组中所有内容的大小.但是,执行sizeof只会执行指针的数组大小,如果我使用指针的话.我想找到实际文件的sizeof,而不是任何持有文件字符串/名称的文件.

let*_*tar 5

有几种方法可以在C++中获取文件的大小.一种方法是寻找文件结尾,然后询问文件指针的位置:

ifstream file("filename.idl", ios::in);
file.seekg(0, ios::end);
auto fileSize = file.tellg();
Run Code Online (Sandbox Code Playgroud)

这甚至在此页面上作为示例给出:

http://www.cplusplus.com/reference/istream/istream/tellg/

除此之外,还有其他(特定于操作系统)解决方案,如评论中指出的那样,但无论您的平台如何,这种方法都应该有效.