2012-05-12 2 views
1

내 리소스 폴더의 data.txt라는 텍스트 파일의 시작 부분에 현재 데이터를 덮어 쓰려고합니다. 항상 한 줄 (공백이나 아무 것도 사용하지 않음)이 있으며 적절한 경우이 줄을 덮어 쓰길 원합니다. 이것은 내가 지금까지 해왔 던 방법이지만, 이것은 파일의 끝 부분에 내용을 쓰고 필요한 라인을 일명 덮어 쓰는 것으로 시작하지 않습니다. 누구든지 나를 도울 수 있다면 그것은 인정 될 것입니다. 감사! 내가 지금까지 그 일을하고 어떻게파일의 현재 내용 덮어 쓰기

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 

//append filename to docs directory 
NSString *myPath = [documentsDirectory stringByAppendingPathComponent:@"data.txt"]; 
fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:myPath]; 

writtenString= [[NSString alloc]initWithFormat:@"%d", message];  

[fileHandle seekToEndOfFile]; 
[fileHandle writeData:[writtenString dataUsingEncoding:NSUTF8StringEncoding]]; 

[writtenString release]; 

답변

2

마이크의 대답은하지만 당신이 상상하고 멋진 라인 지향 방식으로, 당신은 당신의 파일의 내용을 덮어 쓸 수 있습니다.

파일을 삽입하면 기존의 다음 데이터가 나중에 푸시되고 항목을 제거하면 기존의 다음 데이터가 바로 올라 오도록 파일의 내부 내용을 조정할 수 없습니다 제거 점.

두 가지 기본 작업을 사용할 수 있습니다. 파일을 특정 길이 (예 : 0)로 자르고 해당 지점 이후의 이전 데이터를 삭제할 수 있습니다. 그리고 특정 위치에 데이터를 쓸 수 있습니다. 해당 위치에 이미 데이터가있는 경우 덮어 씁니다 (즉, 손실됩니다). 만약 당신이 쓰는 바이트 범위가 파일의 끝을 넘어서 확장된다면 그 파일은 확장된다.

그러나 잘라내거나 덮어 쓰지 않은 이전 데이터는 그대로 있습니다. 어떤 경우에도 그것은 움직입니다.

그래서 텍스트 파일의 첫 번째 줄을 변경하고 새 줄이 이전 줄과 정확히 같은지 확신 할 수없는 경우 모든 내용을 이동해야합니다 두 번째 줄부터 새 위치까지 작은 파일에 적합한 간단한 접근법은 전체 내용을 메모리로 읽어 들이고, 거기에서 조정 한 다음 다시 쓰는 것입니다. 또 다른 방법은 파일을 반복하여 청크로 읽은 다음 새 위치에 쓰는 것입니다. 시작으로 데이터를 이동하는 경우 처음부터 시작합니다. 데이터를 마지막으로 이동하면 끝에서 시작합니다.

+0

자세한 설명 주셔서 감사합니다! –

1

이있다 그러나 이것은 단지 파일의 끝에 내용을 기록하고 내가 원하는 라인을 덮어 일명 처음부터 시작하지 않습니다.

음, 그래, 당신은 호출하기 때문에 :

[fileHandle seekToEndOfFile]; 

을하고 당신이 무엇을 요구하고있어. 시도 :

[fileHandle seekToFileOffset: 0]; 
+0

감사합니다. 마이크가 체크 아웃 할 것입니다. –