C言語でファイルのサイズを取得するプログラムの書き方
この記事では、C言語を使用してファイルのサイズを求めるプログラムを紹介します。標準ライブラリの fseek() 関数と ftell() 関数を組み合わせることで、ファイルのバイト数を簡単に取得できます。
アルゴリズム
Begin
function findfileSize()
ファイルポインタfpを読み取り専用モードで開く
もしfpがNULLならば
「File not found」と表示し、-1を返す
そうでなければファイルサイズをカウントする
ファイルポインタをファイルの先頭に移動する
整数変数resultを宣言し、ftell()関数の戻り値で初期化する
ファイルポインタfpを閉じる
resultを返す
End
仕組みの解説
このプログラムのポイントは、以下の2つの標準ライブラリ関数です。
- fseek(fp, 0L, SEEK_END): ファイルポインタをファイルの末尾へ移動させます。
- ftell(fp): 現在のファイルポインタの位置(先頭からのバイト数)を返します。末尾に移動した状態で呼び出せば、ファイル全体のサイズが取得できます。
なお、指定したファイルが存在しない場合、fopen() は NULL を返すため、その際にはエラーメッセージを表示して -1 を返すようにしています。
サンプルコード
#include <stdio.h>
int findfileSize(char f_n[]) {
FILE* fp = fopen(f_n, "r"); // 読み取りモードでファイルを開く
if (fp == NULL) { // ファイルが存在するかどうかを確認
printf("File Not Found!\n");
return -1;
}
fseek(fp, 0L, SEEK_END); // ファイルポインタを末尾へ移動
int res = ftell(fp); // ファイルのサイズをカウント
fclose(fp); // ファイルを閉じる
return res;
}
int main() {
char f_n[] = { "b.txt" }; // サイズを求めるファイル名は「b.txt」
int result = findfileSize(f_n);
if (result != -1)
printf("Size of the file is %ld bytes \n", result); // ファイルサイズを表示
return 0;
}
実行結果
Size of the file is 2649 bytes
このように、fseek() でファイルポインタを末尾に移動し、ftell() でその位置を取得することで、ファイルサイズをバイト単位で求めることができます。テキストファイルだけでなく、バイナリファイルのサイズ取得にも応用できる基本的なテクニックなので、ぜひ覚えておきましょう。
-
C++で双方向リンクリストのサイズ(要素数)を求めるプログラム
本記事では、双方向リンクリスト(Doubly Linked List)が与えられたときに、そのサイズ(要素数)を求めるC++プログラムの作成方法を詳しく解説します。 双方向リンクリストとは、片方向リンクリストと比べて、各ノードが前後両方向のリンクを持つため、前方にも後方にも自由に移動できる特殊なリンクリストです。まず、双方向リンクリストを理解するうえで重要な用語を確認しておきましょう。 リンク(Link):リンクリストの各リンクには、「要素」と呼ばれるデータが格納されます。 ネクスト(Next):各リンクには、次のリンクを指す参照「Next」が含まれます。 プレヴ(Prev):各リンクに
-
Pythonでサイズkのサブリストの最大値を求めるアルゴリズム
問題の概要 リスト nums と整数 k が与えられたとき、連続する k 個の要素からなる各サブリスト(スライディングウィンドウ)ごとの最大値を求め、その結果をリストとして返すことを考えます。 例えば、nums = [12, 7, 3, 9, 10, 9]、k = 3 の場合、出力は [12, 9, 10, 10] になります。 これは、先頭から順に3要素ずつ区切った [12, 7, 3]、[7, 3, 9]、[3, 9, 10]、[9, 10, 9] のそれぞれの最大値を並べたものです。 解法の考え方 この問題は、現在の最大値とその位置を記録しながら窓をずらしていくことで解けます。具体的な