C++のファイル操作

fopen_s 関数

fopen_sは、標準のfopen関数のセキュリティ強化版です。ファイルを開く際のエラーハンドリングが改善されています。

構文:

errno_t fopen_s(FILE** pFile, const char *filename, const char *mode);

モードの説明:

例:

FILE *fp;
auto err = fopen_s(&fp, "Model/初音ミク.pmd", "rb");
if (err != 0) {
    perror("ファイルを開けませんでした");
    return 1;
}

注意点: fopen_sはエラーコードを直接返し、ファイルポインタを引数として更新します。エラー時には適切な処理が必要です。

fread 関数

freadは、開かれたファイルからデータを読み込む関数です。以下は、引数の詳細説明です。

構文:

size_t fread(void *ptr, size_t size, size_t count, FILE *stream);

引数の詳細説明:

例:

char signature[4];
PMDHeader pmdheader;
unsigned int vertNum;

fread(signature, sizeof(signature), 1, fp);
fread(&pmdheader, sizeof(pmdheader), 1, fp);
fread(&vertNum, sizeof(vertNum), 1, fp);

注意点: データの読み込みが完了すると、実際に読み込まれた要素の数を確認し、エラーやファイルの終わりを検出することが重要です。

fclose 関数

fclose関数は、開かれたファイルストリームを閉じるために使用されます。これにより、関連付けられたバッファがフラッシュされ、オープンされたファイルに関連するリソースが解放されます。

構文:

int fclose(FILE *stream);

例:

fclose(fp);

注意点: ファイルを閉じないと、データが正しく保存されない可能性があり、システムのファイル記述子が枯渇することがあります。常にファイル操作の後にはfcloseを呼び出してファイルを閉じることが推奨されます。