//时间:2011-1-11 22:17:45 #include <stdio.h> #include <stdlib.h> #include <string.h> // 获取文件长度 // 返回值:成功 文件长度(Byte),失败 -1 int GetFileLen(const char* szFileName) { int iLen = -1; FILE *fp = fopen(szFileName, "rb"); if ( fp ) { fseek(fp, 0, SEEK_END); iLen = ftell(fp); fclose(fp); } return iLen; } // 将内存数据覆盖写入磁盘文件 // 返回值:成功 0,失败 -1 int OverwriteToFile(const char* szFileName, const char* pbBuf, int iLen) { int iRet = -1; FILE *fp = fopen(szFileName, "w"); if ( fp ) { if ( iLen > 0 && iLen == (int)fwrite(pbBuf, 1, iLen, fp) ) { iRet = 0; } else if ( 0 == iLen ) { // 以“w”模式打开文件之后立刻关闭,这相当于清空文件。 iRet = 0; } fclose(fp); } return iRet; } // 删除文件中的某一行 // 返回值:成功 0,失败 -1 int DeleFileLine(const char* szFileName, int iRemoveLine) { int iRet = -1; int iFileLen = GetFileLen(szFileName); if ( iFileLen <=0 ) { return iRet; } // 这里假定文件中一行数据的最大长度不超过1KB,用户可自定义。 const int iLineMaxBytes = 1024; char szLineData[iLineMaxBytes]; char* pbBuf = (char*)malloc(iFileLen+1); if (pbBuf) { memset(pbBuf, 0, iFileLen+1); FILE *fp = fopen(szFileName, "r"); if ( fp ) { int iCurLine = 1; while ( true ) { if ( NULL == fgets(szLineData, iFileLen+1, fp) ) { break; } else { if ( iCurLine++ != iRemoveLine ) { strcat(pbBuf, szLineData); } else { iRet = 1; } } } if ( 1 == iRet ) { iRet = OverwriteToFile(szFileName, pbBuf, (int)strlen(pbBuf)); } fclose(fp); } free(pbBuf); pbBuf = NULL; } return iRet; } // 例程 int main(void) { // 删除当前目录下“test.txt”文件中的第1行数据 return DeleFileLine(".//test.txt", 1); }