2017-02-15 1 views
1

파일 끝 부분에 텍스트를 추가하는 방법을 묻지 않습니다. 파일 시작 부분에 텍스트를 어떻게 추가하는지 묻습니다. 내 content 같은Swift 또는 Objective C에서 텍스트를 파일에 미리 작성하는 방법은 무엇입니까?

것 같다
let handle = try FileHandle(forWritingTo: someFile) 
//handle.seekToEndOfFile() // This is for appending 
handle.seek(toFileOffset: 0) // Me trying to seek to the beginning of file 
handle.write(content) 
handle.closeFile() 

는 파일의 시작 부분에 기록되고, 그러나 그것은 단지뿐만 아니라 기존의 동의를 대체합니다 ... 감사합니다!

답변

3

일반적으로 대부분의 파일 시스템에는 데이터를 파일에 추가하기위한 내장 지원 기능이 없습니다. 마찬가지로 대부분의 파일 I/O API도 마찬가지입니다.

데이터를 앞에 추가하려면 먼저 기존 데이터를 모두 파일을 따라 추가로 이동해야합니다. 그러면 처음부터 새 데이터를위한 공간을 확보 할 수 있습니다. 일반적으로 마지막 부분부터 시작하여 데이터 청크를 읽은 다음 원래 위치에 데이터를 더한 데이터 길이와 최종적으로 추가 할 데이터의 길이를 쓰고 파일의 시작 부분에 가까운 다음 청크로 반복하여 작성합니다. 이런 식으로 점차 모든 것을 아래로 이동시킵니다. 모든 작업을 완료 한 후에 만 ​​안전하게 파일의 처음 부분에 안전하게 새 데이터를 쓸 수 있습니다.

솔직히이 문제를 피할 방법이 있으면 시도해야합니다. 파일이 크거나 빈번하게 수행하는 경우 성능이 심각 할 수 있습니다.

+0

예, $ (cat file.txt) "> file.txt"를 앞에 붙이기 위해'echo "텍스트처럼 리눅스에서 할 수있는 좋은 방법을 발견했습니다.하지만 당신이 말했듯이 그렇게하는 것은 쉽지 않습니다. – 7ball

3

한 가지 합리적인 해결책은 임시 파일에 새 내용을 쓰고 기존 내용을 임시 파일의 끝에 추가하는 것입니다. 그런 다음 임시 파일을 이전 파일로 이동하십시오.

기존 파일의 한 지점으로 이동 한 다음 쓰기를 수행하면 해당 지점에서 기존 내용을 덮어 씁니다. 이것이 현재의 접근 방식이 실패하는 이유입니다.

관련 문제