Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C++查找文件大小_C++_Printing_Header_Filenames_Filesize - Fatal编程技术网

用C++查找文件大小

用C++查找文件大小,c++,printing,header,filenames,filesize,C++,Printing,Header,Filenames,Filesize,还有更多的问题,我真的很困惑,它一直困扰着我,我几乎用dirent.h做了所有的尝试。但这里有一个我想要的例子: #include <iostream> #include "DataEventResponseMsg.idl" using namespace std; int main(){ cout << "This is the size: " << sizeof(DataEventResponseMsg) << endl; r

还有更多的问题,我真的很困惑,它一直困扰着我,我几乎用dirent.h做了所有的尝试。但这里有一个我想要的例子:

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

int main(){
    cout << "This is the size: " << sizeof(DataEventResponseMsg) << endl;
    return 0;
}
它所做的就是包含那个特定的文件,找到它的大小并打印出来。我想这样做,但我需要它打开一个充满.idl文件的目录,并使用sizeof打印该文件及其大小

我曾尝试使用dirent.h打开目录,将内容放入ent->d_name,然后查找d_name的大小等等,但所做的只是打印指针的大小。。我尝试将文件放入数组中,但执行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;
}

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

< p>有几种方法可以在C++中获取文件的大小。一种方法是查找文件末尾,然后询问文件指针的位置:

ifstream file("filename.idl", ios::in);
file.seekg(0, ios::end);
auto fileSize = file.tellg();
这一点在本页上甚至可以作为一个例子:


另外,还有其他OS特定的解决方案,如注释中所指出的,但是这种方法应该与平台无关。

< P>有几种方法可以在C++中获得文件的大小。一种方法是查找文件末尾,然后询问文件指针的位置:

ifstream file("filename.idl", ios::in);
file.seekg(0, ios::end);
auto fileSize = file.tellg();
这一点在本页上甚至可以作为一个例子:


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

提供的答案是一种很好的独立于操作系统的获取文件大小的方法,只要您已经知道目录中有哪些文件。如果您不知道目录中有哪些文件,那么您可以重新使用特定于平台的工具,例如,正如您所建议的,dirent for Linux。下面是一个如何使用dirent的简单示例:


提供的答案是一种很好的独立于操作系统的获取文件大小的方法,只要您已经知道目录中有哪些文件。如果您不知道目录中有哪些文件,那么您可以重新使用特定于平台的工具,例如,正如您所建议的,dirent for Linux。下面是一个如何使用dirent的简单示例:


使用stat2获取文件大小。sizeof根本不适用于此;h的方向有点正确。看看_stat/_stat64/stat。。。或者Windows上的GetFileSizeEx你能看看我的编辑吗?我以前用dirent.h做过一些事情,但没有按我希望的方式进行……好吧,现在我知道你想要实现什么了。。嗯,我认为不解析文件是不可能的@chakolatemilk也许您应该将问题标题编辑为类似“确定中包含的结构的大小”这样的内容files@lethal-吉他,是的,我很害怕使用stat2获取文件大小。sizeof根本不适用于此;h的方向有点正确。看看_stat/_stat64/stat。。。或者Windows上的GetFileSizeEx你能看看我的编辑吗?我以前用dirent.h做过一些事情,但没有按我希望的方式进行……好吧,现在我知道你想要实现什么了。。嗯,我认为不解析文件是不可能的@chakolatemilk也许您应该将问题标题编辑为类似“确定中包含的结构的大小”这样的内容files@lethal-吉他,是的,我很害怕我知道这件事,我也做过。。但是我试图避免的是必须手动键入代码中的每个文件。。我希望代码打开一个目录,查看每个文件,并打印出文件名及其大小:/我知道这件事,我也做过。。但是我试图避免的是必须手动键入代码中的每个文件。。我希望代码打开一个目录,查看每个文件,并打印出文件名及其大小:/好吧,这真的很有效。这几乎就是我想要的。。但是你看。。我正在尝试查找的.idl文件的大小。。我试图找到结构的大小,而不是实际的文件字节。。这就是我之所以使用sizeof的原因,因为我在上面主题中发布的第一个代码,它找到了特定.idl的结构的大小,它是80。。我希望能够对我拥有的其余.idl文件执行此操作。。有点奇怪,我知道..@chakolatemilk-什么是.idl文件?里面有什么?它是一个接口
操作系统窗口的定义文件。然而,在idl中,只有1或2个结构,每个结构中大约有3或4个变量。当我在一个上使用sizeof时,它应该显示结构的大小,而不是整个.idl的大小(以字节为单位)。。我希望你明白我想问的是什么。@chakolatemilk-你不能用dirent和sizeof来做这个。dirent是一个在运行时读取目录的运行时函数;sizeof总是在编译时解析为常量。也许您可以解析.idl文件的内容以获得其中变量的类型,然后计算每个变量的大小。或者,创建一个.cpp源文件,每个.idl文件一个,并使用include和sizeof构造以这种方式显示大小。您的main需要在每个.cpp文件中调用一个函数,以打印其相应的.idl文件的结果。@chakolatemilk-虽然我的代码示例和答案并不完全符合您的需要,但它们确实按照说明回答了您的问题,因为它们提供了文件及其大小。希望我上面的评论也能帮助您找到真正需要的解决方案。如果你确实觉得它们有帮助,请向上投票并选择我的答案。如果你需要进一步的帮助,让我知道。好的,这很有效。这几乎就是我想要的。。但是你看。。我正在尝试查找的.idl文件的大小。。我试图找到结构的大小,而不是实际的文件字节。。这就是我之所以使用sizeof的原因,因为我在上面主题中发布的第一个代码,它找到了特定.idl的结构的大小,它是80。。我希望能够对我拥有的其余.idl文件执行此操作。。有点奇怪,我知道..@chakolatemilk-什么是.idl文件?里面有什么?它是一个操作系统Windows的接口定义文件。然而,在idl中,只有1或2个结构,每个结构中大约有3或4个变量。当我在一个上使用sizeof时,它应该显示结构的大小,而不是整个.idl的大小(以字节为单位)。。我希望你明白我想问的是什么。@chakolatemilk-你不能用dirent和sizeof来做这个。dirent是一个在运行时读取目录的运行时函数;sizeof总是在编译时解析为常量。也许您可以解析.idl文件的内容以获得其中变量的类型,然后计算每个变量的大小。或者,创建一个.cpp源文件,每个.idl文件一个,并使用include和sizeof构造以这种方式显示大小。您的main需要在每个.cpp文件中调用一个函数,以打印其相应的.idl文件的结果。@chakolatemilk-虽然我的代码示例和答案并不完全符合您的需要,但它们确实按照说明回答了您的问题,因为它们提供了文件及其大小。希望我上面的评论也能帮助您找到真正需要的解决方案。如果你确实觉得它们有帮助,请向上投票并选择我的答案。如果你需要进一步的帮助,请告诉我。