c语言如何先写文件体,再写文件头

    技术2025-03-30  9

    #include <stdio.h> #include <stdlib.h> #include <string.h> // 测试时使用的文件 #define SRC_FILE_NAME (const char *)"test_a.txt" // 文件头预留64个字节 #define FILE_HEADER_LEN 64 /*============================================================================== 函 数 名 : GetFile 功 能 : 获取文件句柄 算法实现 : 无 参 数 : [in] const char *pFileName - 文件名 返 回 值 : 成功-得到的文件句柄,失败-NULL 日 期 : 2011/02/11 作 者 : jernymy ==============================================================================*/ static FILE *GetFile(const char *pFileName) { // 使用rt+的方式打开文件 FILE *fpSrc = fopen(pFileName, "rt+"); if (NULL != fpSrc) { // 文件存在 return fpSrc; } printf("open %s /"rt+/" fail, may be create first!/n", pFileName); // 创建文件 fpSrc = fopen(pFileName, "wt"); if (NULL != fpSrc) { // 文件创建成功 printf("create %s /"wt/" succ, pointer:%p!/n", pFileName, fpSrc); } else { // 文件创建失败 printf("create %s /"wt/" fail, pointer:%p!/n", pFileName, fpSrc); } return fpSrc; } /*============================================================================== 函 数 名 : WriteFile 功 能 : 写文件操作 算法实现 : 无 参 数 : [in] const char *pFileName - 文件名 [in] const char *pchStr - 写入的字符串buffer 返 回 值 : 成功-0,失败--1 日 期 : 2011/02/11 作 者 : jernymy ==============================================================================*/ static int WriteFile(const char *pFileName, const char *pchStr) { FILE *fpSrc = NULL; int nFileLen; if (NULL == pFileName) { printf("pFileName is NULL, exit!/n"); return -1; } if (NULL == pchStr) { printf("pchStr is NULL, exit!/n"); return -1; } fpSrc = GetFile(pFileName); if (NULL == fpSrc) { printf("get file fail! exit/n"); return -1; } // 得到文件大小-文件长度 fseek(fpSrc, 0L, SEEK_END); nFileLen = ftell(fpSrc); // 写文件头后面部分 if (0 == nFileLen) { nFileLen = FILE_HEADER_LEN; } fseek(fpSrc, nFileLen, SEEK_SET); if (FILE_HEADER_LEN == nFileLen) { fprintf(fpSrc, "/n"); } fprintf(fpSrc, "%s/n", pchStr); // 写文件头部分 fseek(fpSrc, 0L, SEEK_END); nFileLen = ftell(fpSrc); fseek(fpSrc, 0L, SEEK_SET); fprintf(fpSrc, "File size:%09d", nFileLen); // 关闭文件 if (NULL != fpSrc) { fclose(fpSrc); fpSrc = NULL; } return 0; } /*============================================================================== 函 数 名 : main 功 能 : 程序主函数 算法实现 : 无 参 数 : 无 返 回 值 : 成功-0,失败--1 日 期 : 2011/02/11 作 者 : jernymy ==============================================================================*/ int main(void) { int nIdx; char achBuf[20] = {0}; for (nIdx = 0; nIdx < 20; nIdx++) { sprintf(achBuf, "Index:%d%c", nIdx, 0); WriteFile(SRC_FILE_NAME, achBuf); } return 0; }

    最新回复(0)