- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VisualC++でのバイナリファイル)
VisualC++でのバイナリファイルのサイズの取得方法
このQ&Aのポイント
- VisualC++でバイナリファイルのサイズを取得する方法について説明します。
- 通常の方法ではなく、空読みする方法でサイズを取得できることがわかりました。
- Cの仕様の変更か、VC++の特殊な動作か、他の方法があるかどうかを検討しています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
肝心な事書き忘れてました _stat() を調べて見てください。 あとおそらくですがNUL文字と0x1aを勘違いされているかと思います。 CP/Mでは0x1aがファイル終端のコードとして扱われていたためMSDOSやその後継であるWindowsのCコンパイラでは互換性のためにテキストモードで0x1aを読み込んだ際にはファイル終端とみなすようになっています(Cのライブラリでそういう処理になってるというだけで本当にファイル終端というわけではありません)。
その他の回答 (2)
- wormhole
- ベストアンサー率28% (1626/5665)
回答No.2
>(fseekのSEEK_END動作が不定のため) 「fseekのSEEK_ENDの動作が不定」というのはどういう事でしょうか? SEEK_ENDはファイル末尾基準という意味ですから、第2引数に0を指定すればファイル終端そのものですけど。 ファイル中にNUL文字があろうがなかろうが関係ありません。 これはテキストモードでも同様です。 勘違いされているようですがテキストモードでもNUL文字の読み書きはできます。 printf系やfgetsなどのNUL文字を文字列の終端として扱ってる関数ではNUL文字の読み書きがしにくいというだけです(文字列の終端のNUL文字なのかそうでないのかの区別がつかないから)。 >これはCの仕様が変わったためなのか、VC++がたまたま対応しているのか、どちらでしょうか? Cの仕様は変わっていませんしVC++もふつうに対応してるだけの事かと思いますが。
- bardfish
- ベストアンサー率28% (5029/17766)
回答No.1
バイナリモードでオープンしているから。 通常モードでオープンしていればNULLをファイルの終端と判断してしまう。 「rb」って「Read Binary」だと思いましたけど?
お礼
ありがとうございました。