2

さらに多くの問題、私は本当に混乱しています、そしてそれは私を終わりのないものに悩ませています、私は同様に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を実行すると、ポインターの配列のサイズ(ポインターを使用した場合)のみが実行されます。そして、ファイルの文字列/名前を保持しているものではなく、実際のファイルのサイズを見つけたいと思います。

4

2 に答える 2

5

C++でファイルのサイズを取得する方法はいくつかあります。1つの方法は、ファイルの最後までシークしてから、ファイルポインタの位置を尋ねることです。

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

これは、このページの例としても示されています。

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

それ以外にも、コメントで指摘されているような他の(OS固有の)ソリューションがありますが、このアプローチはプラットフォームに関係なく機能するはずです。

于 2013-01-30T19:49:44.483 に答える
2

提供される答えの致命的なギターは、ディレクトリ内のファイルがすでにわかっている限り、OSに依存しないファイルサイズを取得するための優れた方法です。ディレクトリ内のファイルがわからない場合は、dirent提案されているように、Linuxなどのプラットフォーム固有のツールを使用することに戻ります。以下は、使用方法の簡単な例ですdirent

#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>

int main(int argc, char *argv[]) {
    struct stat file_stats;
    DIR *dirp;
    struct dirent* dent;

    dirp=opendir("."); // list files in the current directory (replace with any other path if you need to)
    do {
        dent = readdir(dirp);
        if (dent)
        {
            printf("  file \"%s\"", dent->d_name);
            if (!stat(dent->d_name, &file_stats))
            {
                printf(" is size %u\n", (unsigned int)file_stats.st_size);
            }
            else
            {
                printf(" (stat() failed for this file)\n");
            }
        }
    } while (dent);
    closedir(dirp);
}
于 2013-01-30T20:27:55.850 に答える