2010-01-24 9 views
0

현재 ReadFile() 및 WriteFile() API를 사용하여 파일에서 읽은 &을 작성하고 있습니다. 거기에 데이터를 다시 쓸 수있을만큼 큰 경우 텍스트를 대체/편집하는 API 함수가 있습니까? SetFilePointer()에 대해서만 들었지만 파일에서 텍스트를 바꾸는 방법을 잘 모르겠습니다.구성에서 값을 편집하십시오. 파일

예를 들어, 파일에서 문자열/char를 선택하십시오. 예를 들어, Key2의 값 '0'.

키 1 = 0
키 2 = 0

과 '1'로 변경.

키 1 = 0
키 2 = 1

답변

2

을 기능 GetPrivateProfileString 및 WritePrivateProfileString이 좋은 수 있습니다.

+0

물론 이것은 전체 파일을 다시 쓰는 것으로 작동합니다. –

+0

@ Neeil : 나는 이것을 너무나 당연하다고 생각했기 때문에 언급하지 않았다. 그러나 그것이 사실이 아님이 밝혀졌습니다. 필자는 이제 WritePrivateProfileString을 호출하고 filemon과 네트워크 스니퍼를 사용하여 키 값의 길이를 변경할 필요가없는 경우 전체 파일을 쓰지 않는 것으로 나타났습니다. 내 PC (XP)에서는 키 크기가 같을 때만 4K를 씁니다. 따라서 실제로는 매우 효율적일 수 있습니다. 반면에, 데이터를 읽는 것은 처음부터 업데이트 위치를 찾기 위해 파일을 스캔해야하므로 효율적이지 않습니다. –

+0

잘 살고 배우십시오! 정보 주셔서 감사합니다. –

1

파일에 대한 랜덤 액세스를위한 API를 많이가 있습니다. 그들은 거의 모두 텍스트 파일을 다루기에 거의 부적합합니다.

1 자리 숫자를 변경하는 대신 1에서 2로 변경하면 "효율적인"랜덤 액세스 방법뿐만 아니라 "비효율적 인"방법을 구현해야합니다. "파일 방법을 다시 작성합니다. 당신은 오직 정말 일을하는 한 가지 방법을 원하는 것처럼,"비효율적 "하나가 갈 수있는 일입니다.

+0

어떤 파일 형식이 이러한 작업에 효율적인 방식으로 적합할까요? – cpx

+1

블록 구조입니다. 그러나 구성 파일의 주요 요구 사항 중 하나 인 텍스트 편집기로 편집 할 수 없습니다. –

0

텍스트 파일의 경우 파일을 메모리로 읽어서 작업하고 다시 작성하는 것이 가장 좋습니다. 예를 들어 std::string에 파일 내용을 읽고 Key2 =을 찾아 th를 새로운 가치로 라인의 나머지 부분. 그런 다음 문자열을 다시 저장하십시오. std::ifstream을 사용하면 단일 WinAPI 호출없이 파일에서 읽을 수 있습니다.

관련 문제