fopen_sは、標準のfopen関数のセキュリティ強化版です。ファイルを開く際のエラーハンドリングが改善されています。
構文:
errno_t fopen_s(FILE** pFile, const char *filename, const char *mode);
モードの説明:
"r" - 読み込み専用。ファイルが存在しない場合はエラー。"w" - 書き込み専用。ファイルが存在する場合はその内容を削除し、存在しない場合は新規作成。"a" - 追記専用。ファイルの末尾にデータを追加。ファイルが存在しない場合は新規作成。"r+" - 読み書き両用。ファイルが存在しない場合はエラー。"w+" - 読み書き両用。ファイルが存在する場合はその内容を削除し、存在しない場合は新規作成。"a+" - 読み書き両用で追記。ファイルの末尾にデータを追加し、ファイルが存在しない場合は新規作成。"rb", "wb", "ab", "rb+", "wb+", "ab+" - 上記モードに対応したバイナリファイル用モード。例:
FILE *fp;
auto err = fopen_s(&fp, "Model/初音ミク.pmd", "rb");
if (err != 0) {
perror("ファイルを開けませんでした");
return 1;
}
注意点: fopen_sはエラーコードを直接返し、ファイルポインタを引数として更新します。エラー時には適切な処理が必要です。
freadは、開かれたファイルからデータを読み込む関数です。以下は、引数の詳細説明です。
構文:
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
引数の詳細説明:
fopen_sやfopenなどで開いておく必要があります。例:
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関数は、開かれたファイルストリームを閉じるために使用されます。これにより、関連付けられたバッファがフラッシュされ、オープンされたファイルに関連するリソースが解放されます。
構文:
int fclose(FILE *stream);
例:
fclose(fp);
注意点: ファイルを閉じないと、データが正しく保存されない可能性があり、システムのファイル記述子が枯渇することがあります。常にファイル操作の後にはfcloseを呼び出してファイルを閉じることが推奨されます。