텍스트 파일에서 주어진 줄을 삭제하고 싶기 때문에 삭제하려는 줄을 제외한 모든 줄을 쓰는 임시 파일을 사용합니다.
파일의 마지막 줄을 제외하고는 모든 것이 괜찮습니다. 마지막 줄을 삭제하고 싶을 때 결과는 삭제 된 줄 대신 빈 줄이지 만 아무것도 없어야하고 빈 줄이 없어야합니다.
char line[255];
unsigned int countline=0;
unsigned int linetodelete;//fixed by the user
FILE *file=fopen(filename,"r");
FILE *filetemp=fopen("__tempfile__","w");
while(fgets(line,255,file)!=NULL){
if(countline!=linetodelete)
fputs(line,filetemp);
countline++;
}
fclose(file);
fclose(filetemp);
file=fopen(filename,"w");
filetemp=fopen("__tempfile__","r");
while(fgets(line,255,filetemp)!=NULL)
fputs(line,file);
fclose(file);
fclose(filetemp);
remove("__tempfile__");
파일 예 : (파일에서 볼 수있는 내용을 설명하기 위해 줄 번호를 추가합니다.)
000 line0
001 line1
002 line2
라인 1 (001) 삭제를 요청할 때의 결과 :
000 line0
001 line2
2 행 삭제 요청 결과 (002) :
000 line0
001 line1
002
빈 줄이 보이십니까? 왜 이런거야 ? 그것을 다루는 방법? 감사
편집 : 정밀도
#include <stdio.h>
#include <stdlib.h>
void deleteline(const char *filename,unsigned int linetodelete){
FILE *file=fopen(filename,"r");
FILE *filetemp=fopen("__tempfile__","w");
char line[255];
unsigned int countline=0;
while(fgets(line,255,file)!=NULL){
if(countline!=linetodelete)
fputs(line,filetemp);
countline++;
}
fclose(file);
fclose(filetemp);
rename("__tempfile__",filename);
}
void print(const char *filename){
FILE *file=fopen(filename,"r");
char line[255];
unsigned int countline=0;
while(fgets(line,255,file)!=NULL){
printf("%03d ", countline);
printf("%s",line);
countline++;
}
printf("\r\n");
fclose(file);
}
int main(){
printf("before\n");
print("test.txt");
deleteline("test.txt",2);
printf("after\n");
print("test.txt");
}
전에:
cat -n test.txt
1 line0
2 line1
3 line2
후:
cat -n test.txt
1 line0
2 line1
내 파일 편집기에서 얻은 내용은 다음과 같습니다.
용어 :
이 처리 방법을 사용할 수 있습니다.
if(countline!=linetodelete){
char *p = line;
p[strlen(p)-1] = 0;
if(countline == 0){
fprintf(filetemp, "%s", p);
}
else{
fprintf(filetemp, "\n%s", p);
}
}
이렇게하면 파일 끝에서 빈 줄을 피할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다