天天看點

C語言 實作替換檔案中指定一行的内容(基于檔案指針的檔案操作)

本人學生一枚,第一次在CSND寫部落格。不為别的,希望能将自己學到的内容寫出來,加深自己的記憶。

貼一個自己昨晚寫的作業。

//将指定一行的内容全部替換為空格
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>

int main(char argc,char* argv[])
{
	int cnt;
	int line;            
	int c,c1;
	FILE *fp;
	int i=1;
	char ch;
	printf("1.txt有5行,選擇其中一行替換為空格:");
	scanf("%d",&line);
	fp=fopen("./2.txt","r+");
	if(fp<0)
	{
		printf("檔案打開失敗!\n");
		exit(1);
	}
	
    //檢測行數,如遇到回車'/n',意味着一行的結束,i++
	while(i!=line)
	{
		ch=fgetc(fp);
		if(ch=='\n')
		{
			i++;
		}
	}

//檢測到指定行開頭的指針位置,将其指派給c
	c=ftell(fp);
//周遊一遍目标行,确定該行長度,同時for循環結束時c1為該行末尾的指針位置
	while(fgetc(fp)!='\n')
	{
		c1=ftell(fp);
	}
//将檔案指針移到目标行的行首
	fseek(fp,c,SEEK_SET);
//得到目标行的長度
	cnt=c1-c;
//for循環插入想要修改的内容
	for(i=0;i<cnt;i++)
	{
		fputc(' ',fp);
	}


	if(fclose(fp)==0)
		printf("檔案關閉成功!\n");
	else
		printf("檔案關閉失敗!\n");
	return 0;
	
}
           

昨晚做該題時遇到幾個問題:

1,一開始将檔案打開方式設為a+了,是以每次寫入一個字元時會插在檔案的末尾,是以要注意檔案打開的方式(r+,r,w,w+,a,a+)。

2,輸入目标行line,最開始設定為1,這樣檢測到目标行時正好在目标行的開頭。

如有錯誤,望大家不惜指點。

繼續閱讀