2013-05-17 3 views
0

파일에 문자열을 쓰고 나서 되감습니다. 이것은, 나는 반복하고있다.
실제로는 정상적으로 작동하지만 파일의 끝에는 마지막 문자열에서 일부 문자가 복제됩니다. 여분의 문자를 제거하려면 어떻게해야합니까?루프에서 파일에 문자열을 쓰면 파일 끝 부분에 여분의 문자가 표시됩니다.

그래서, 내가 루프의 끝에서마다 문자열을 파일에 기록하고, 그것을 되 감고 루프를 가지고 :

루프

{
fputs ("문자열 1 \ 없음", 파일) ;
fputs ("string2 \ n", file);
fputs ("string3 \ n", file);
fputs ("stringLAST", file);
fseek (file, 0, SEEK_SET);} // 되감기 (파일); 나는 같은 결과를 얻는다.

문자열 1
문자열 2
string3
stringLASTstringLASTASTASTSTST

지금, 내가 stringLAST 문자열에 추가 문자가 있습니다

은 결과적으로 내 파일은 다음과 같이 보입니다. 하지만 난이 같다고해야

문자열 1
문자열 2
string3
stringLAST

+1

아마 이전 실행에서 남겨 둡니다. 나는 당신이 찾고 & 되감기를 참조하십시오. 나열된 코드 바로 앞에 출력 (삭제 또는 잘라내 기)을 위해 파일을 열면 아마 정상적으로 작동합니다. –

+1

오류를 확인 하시겠습니까? fputs는 오류시 EOF를 반환합니다. 파일을 플러시 해 보셨습니까? 되감기 할 때 버퍼에 남아있을 수 있습니다. – stonemetal

+0

네,'ftruncate (fileno (file), 0)'로 잘라야합니다. 자, 그게 무슨 뜻인지 찾아야 해. –

답변

3

당신은 이전과 같이, 다시 작성에 파일의 크기를 0으로 만듭니다하는 것 같아서 :

#include <stdio.h> 
#include <unistd.h> 
#include <sys/types.h> 

    ... 
    if (-1 == fseek(file, 0, SEEK_SET)) 
    perror("fseek()"); 

    if (-1 == ftruncate(fileno(file), 0)) 
    perror("ftruncate()"); 
} 
+0

고맙습니다. 첫 번째 if-statement가 없어도 잘 해결되었습니다. 첫 번째 if 문을 포함 시키면 전체 파일이 비어있게됩니다. –

관련 문제