//C读写文件--删除指定的一行
#include
#include
#include
void InsertLine(char* FileName, int Line, char str[256]);
void deleteLine(char* FileName, int lineno) ;
void print(char *filepath);
int main()
{
print("test.txt");
printf("/n....................................................../n");
system("pause");
InsertLine("E://suworkspace//devcpp//test.txt", 3, "1111111111/n");
print("test.txt");
system("pause");
printf("/n....................................................../n");
deleteLine("test.txt", 3);
printf("/n....................................................../n");
print("test.txt");
system("pause");
return 0;
}
/**********************************************************************
* 函数名称: InsertLine
* 功能描述: 向文件指定行增加一行
* 访问的表: 无
* 修改的表: 无
* 输入参数: char* FileName 文件
int Line 行;
* char str[256] 要增加的内容
*
***********************************************************************/
void InsertLine(char* FileName, int Line, char str[256])
{
int Lid=0;
int MaxLine=0;
FILE* fp=NULL;
char Buf[256]="";
char tmp[50][256]={0};
if ((fp=fopen(FileName,"r+")) == NULL)
{
printf("Can't open file!/n");
return;
}
while (fgets(Buf, 256 ,fp))
{
Lid++;
if(Lid == Line)
{
strcpy(tmp[Lid++],str);
}
strcpy(tmp[Lid],Buf);
}
MaxLine=Lid;
rewind(fp);
for(Lid=1 ;Lid <= MaxLine;Lid++)
{
fputs(tmp[Lid],fp);
}
fclose(fp);
}
/**********************************************************************
* 函数名称: deleteLine
* 功能描述: 向文件指定行删除一行
* 访问的表: 无
* 修改的表: 无
* 输入参数: char* FileName 文件
int Line 行;
*
***********************************************************************/
void deleteLine(char* FileName, int lineno)
{
int Lid=0;
int MaxLine=0;
FILE* fp=NULL;
char Buf[256]="";
char tmp[20][256]={0};
char *p = Buf;
if ((fp = fopen(FileName, "r+")) == NULL)
{
printf("Can't open file!/n");
return;
}
while ((p = fgets(Buf, 256, fp)) != NULL)
{
Lid++;
if (Lid == lineno)
{
if ((p = fgets(Buf, 256, fp)) != NULL)
{
strcpy(tmp[Lid], Buf);
}
}
else
{
strcpy(tmp[Lid], Buf);
}
}
MaxLine = Lid;
rewind(fp);
fclose(fp);
remove(FileName); // 删除原文件
if((fp = fopen(FileName, "w")) == NULL)
{
printf("Can't open file!/n");
return;
}
for(Lid = 1; Lid <= MaxLine; Lid++)
{
fputs(tmp[Lid], fp);
}
fclose(fp);
}
//输出到控制台
void print(char *filepath)
{
int nl = 0;
FILE *stream;
char s[256];
char *p = s;
stream = fopen(filepath, "r+");
while ((p = fgets(s, 256, stream)) != NULL)
{
nl++;
printf("Line %d: %s", nl, s);
}
fclose(stream);
}