質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

ファイル全体のサイズ(byte)を取得する方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

3回答

-4評価

0クリップ

734閲覧

投稿2022/01/05 10:47

編集2022/01/05 11:52

提示コードのコメント部内部のコードですがファイル全体のサイズ - ピクセルデータヘッダーファイズを算出したいのですが上手くいきません。現状はファイルの全体サイズ - ピクセルデータをすると謎の大きい値が表示されます。GetFileSize()関数でファイルの全体のサイズを取得していますがやり方が違うみたいです。 どうすればファイル全体の長さをbyteで取得出来るのでしょうか?

読み込みファイルは2024,2024 RGBA .dds です。

イメージ説明

cpp

// ##################################### ファイルサイズを取得 ##################################### long long GetFileSize(std::string path) { FILE* file; fopen_s(&file, path.c_str(), "r"); if (file != NULL) { if (fseek(file, 0L, SEEK_END) == 0) { fpos_t pos; if (fgetpos(file, &pos) == 0) { fclose(file); return pos; } } } return -1; }

cpp

//画像書き込み unsigned int si = loadTexture.size(); fwrite(&si,sizeof(unsigned int),1,file); //テクスチャの数 for (int t = 0; t < loadTexture.size(); t++) { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // int s = GetFileSize(loadTexture.at(t)); //ファイルサイズ glm::ivec2 size = glm::ivec2(0,0); int channel = 0; unsigned char* data = SOIL_load_image(loadTexture.at(t).c_str(), &size.x, &size.y, &channel, SOIL_LOAD_RGBA); printf("size.x: %d\n", size.x); printf("size.y: %d\n", size.y); printf("channel: %d\n", channel); unsigned char ch = (unsigned char)channel; unsigned long long fileSize = GetFileSize(loadTexture.at(t)); printf("fileSize: %llu\n",fileSize); unsigned long long dataSize = size.x * size.y * channel; printf("dataSize: %llu\n", dataSize); fwrite(loadTexture.at(t).c_str(), sizeof(char), TEXTURE_FILE_PATH_SIZE, file); //テクスチャ名 fwrite(&size.x, sizeof(unsigned int), 1, file); //X fwrite(&size.y, sizeof(unsigned int), 1, file); //Y fwrite(&ch, sizeof(unsigned char), 1, file); //channel  long long sizeData = (fileSize - dataSize); fwrite(&sizeData,sizeof(unsigned long),1,file); //ヘッダサイズ printf("sizeData: %llu\n\n\n",sizeData); ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// FILE *ddsFile = NULL; fopen_s(&ddsFile, loadTexture.at(t).c_str(), "rb"); if ( ddsFile == NULL ) { std::cerr << "ファイルがありません: " << loadTexture.at(t).c_str() << std::endl; assert(0); } else { while (true) { char line[LINE_BUFFER] = { '\0' }; int res = fscanf_s(ddsFile, "%s", line, (unsigned int)LINE_BUFFER); if (res == EOF) { break; } else { fwrite(line, sizeof(unsigned char), strlen(line), file); } } } SOIL_free_image_data(data); //解放 }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

int32_t

2022/01/05 11:00

どのようにうまく行かないのですか? どういう結果を期待していて、実際はどういう結果になるのですか?

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。