2017-03-29 18 views
1

다음과 같이 (텍스트) 파일을 열었습니다 : File *fp = fopen("findPattern2.txt", "w+"); 텍스트를 작성했습니다. 내가 가지고있는 마지막 캐릭터는 ,입니다. 이제 백 스페이스를 사용하여 해당 문자를 삭제하고 싶습니다. 대답 here 백 스페이스 만 커서를 이동한다는 것을 읽은 다음 위에 글을 써서 그 문자를 덮어 써야하며 이것이 내가하는 일입니다. 그래서 을 완전히 지우고 ,을 지우지 만 나중에 파일이 표시됩니다 : ,BS BS. 이 모든 것은 터미널에서 작동합니다. 왜 파일을 가지고 있지 않습니까?파일에서 의도 한대로 백 스페이스 ( b)가 작동하지 않는 이유는 무엇입니까?

파일에서이 작업을 수행하는 유일한 방법은 메모리 매핑, 내용 편집, 새 파일 복사 및 이전 삭제입니다.

+0

'fseek' 또는'fsetpos'를 사용해 보셨습니까? – user694733

+0

@ user694733 예. 그것은 작동합니다. 하지만 제 질문은 그것에 관한 것이 아닙니다. –

+0

질문 : * "내가 파일을 저장하는 유일한 방법은 내가 메모리를 매핑하고, 내용을 편집하고, 새 파일에 복사하고, 이전 파일을 삭제하는 것입니다." 그 문장은 당신이 솔루션을 원했던 것처럼 들리지만, 당신의 의견은 단지 설명을 원한다는 것을 나타냅니다. 질문에 답해야 할 질문이 무엇인지 분명히하기 위해 질문을 편집해야합니다. – user694733

답변

5

파일은 프로그램에서 읽을 때 그림이나 비디오 등의 의미있는 결과를 생성하는 바이트 모음입니다. 프로그램이 백 스페이스 문자가 진행중인 문자를 삭제해야한다는 것을 안다면, 아무 것도하지 않을 것입니다.

터미널은 백 스페이스와 같은 특수 문자에 반응하는 방식으로 작성된 프로그램으로 수신 할 때 수행 할 작업을 알고 있습니다.

3

BS 문자를 터미널로 "인쇄"하면 후자가이를 해석하여 커서가 왼쪽으로 이동합니다.

BS 문자를 파일로 "fprintf"하면 BS 문자 (단순히 바이트 임)가 파일에 간단히 기록됩니다.

2

커서 및 행 편집은 파일이 아니라 콘솔과 단말기에있는 것입니다.

파일 작동 방식을 오해하는 것 같습니다.

파일 내부를 편집하는 개념은 없습니다. 바이트 시퀀스입니다. fseek()을 사용하여 현재 위치 ("커서"라고도하지만 파일이 텍스트 편집기처럼 작동한다는 의미는 아닙니다)를 이동 한 다음 새 데이터를 쓰면 덮어 쓸 수 있습니다.