[解決済み] C言語でのファイルサイズはどのように決定するのですか?
2022-04-27 14:19:22
質問
ファイルのサイズをバイト単位で知るにはどうしたらいいですか?
#include <stdio.h>
unsigned int fsize(char* file){
//what goes here?
}
どのように解決するのですか?
Unix系システムでは、POSIXシステムコールを使用することができます。
stat
道すがら
或いは
fstat
既に開いているファイル記述子に対して(POSIX
マンページ
, Linux
マンページ
).
(からファイルディスクリプタを取得する)。
open(2)
或いは
fileno(FILE*)
を stdio ストリーム上で実行します)。
NilObjectのコードに基づく。
#include <sys/stat.h>
#include <sys/types.h>
off_t fsize(const char *filename) {
struct stat st;
if (stat(filename, &st) == 0)
return st.st_size;
return -1;
}
変更点
-
ファイル名の引数を
const char
. -
を修正しました。
struct stat
の定義で、変数名が欠落していた。 -
戻り値
-1
の代わりに、エラー時に0
これは、空のファイルに対して曖昧になります。off_t
は符号付きタイプなので可能です。
もし
fsize()
を使用して、エラー時にメッセージを表示させることができます。
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
off_t fsize(const char *filename) {
struct stat st;
if (stat(filename, &st) == 0)
return st.st_size;
fprintf(stderr, "Cannot determine size of %s: %s\n",
filename, strerror(errno));
return -1;
}
32ビットシステム上では、オプション
-D_FILE_OFFSET_BITS=64
そうでない場合は
off_t
は2GBまでの値しか保持できません。のquot;LFSの使用法"の項を参照してください。
Linuxにおけるラージファイルのサポート
をご覧ください。
関連
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] C言語で配列のサイズを決定するにはどうすればよいですか?
-
[解決済み] Pythonでファイルサイズを確認するには?
-
[解決済み] Cコードの単体テスト【終了しました
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
libc++abi.dylib: NSException タイプの捕捉されない例外で終了するエラー
-
[C] Error [Error] 代入の左オペランドとして lvalue が必要です。
-
initializer element is not constant "というエラーが表示されるのですが?
-
警告:符号付き整数式と符号なし整数式の比較 [-Wsign-compare]
-
[解決済み] C言語で%sを正しく使う - 超基本レベル
-
[解決済み] Windows用Cコンパイラ?[クローズド]
-
[解決済み] ソケットアクセプト - "開かれているファイルが多すぎる"
-
[解決済み] "static const" vs "#define" vs "enum"
-
[解決済み] C言語でランダムなint型を生成するには?
-
[解決済み] C言語でファイルサイズを取得するには?[重複]する