2011-10-13 2 views
4

델파이 7에서는 CreateFileMapping으로 파일을 열고 MapViewOfFile을 사용하여 포인터를 얻습니다.어떻게 메모리 매핑 파일의 길이를 연장 할 수 있습니까?

어떻게 메모리를 확장하고 메모리에 일부 문자를 추가하여 해당 파일에 저장합니까?

적절한 모드 (fmOpenReadWrite, PAGE_READWRITE), 으로 파일을 열었습니다. 문자를 덮어 쓰면 파일에 저장되지만 파일 중간에 여분의 값을 추가해야합니다.

답변

8

경우에, 당신은 두 가지 방법 중 하나를 사용하여 파일 크기를 조절할 수 있습니다 . 새 매핑과 일치하도록 파일의 크기가 조정됩니다.

2) SetFilePointer()SetEndOfFile()을 사용하여 파일의 크기를 직접 조정 한 다음 CreateFileMapping()을 새 크기로 호출하십시오.

두 조건에 대해서는 CreateFileMapping() 설명서에 설명되어 있습니다.

3

이미 생성 된 CreateFileMapping으로 만든 파일 매핑의 크기를 조정할 수 없습니다. 주제에 대한 이전 토론을 참조하십시오 : Windows: Resize shared memory.

1) 현재의 파일 크기를 초과하는 크기 CreateFileMapping() 전화 : 파일 매핑이 실제 파일 및 메모리의하지 블록에 의해 백업됩니다

+0

오케이. 따라서 열린 뷰에서 새 파일을 만들 수 있다고 가정합니다. 한 가지 더 궁금한 점은 프로세스 주소 공간이 얼마나 오래 있는지 전체 파일을 매핑 할 수 있는지 확인하려면 어떻게해야합니까? – John

+0

정확히 파일이 아니므로 기본적으로 프로세스 주소 공간에 매핑 가능한 공유 메모리 인'파일 매핑 '입니다. 기존 파일 매핑을 닫거나/없애고 새 파일 매핑을 만들거나 추가 파일 매핑을 만들고 어떻게 든이 두 파일을 링크 할 수 있습니다. 'MapViewOfFileEx'를 사용하여 인접한 주소 공간을 만들도록 두 개의 매핑을 매핑하는 옵션이 있지만 권장하지는 않습니다. –

+0

글쎄요, 메모리에있는 파일의 전체 내용을 볼 수 있다면, 그 포인터를 일반적인 델파이 스트림에 써서 약간의 변경으로 파일을 저장할 수 있습니다. 맞습니까? 제 초 질문에 대답 해 주시겠습니까? 프로세스 주소 공간의 길이를 결정하는 방법은 무엇입니까? 감사합니다 – John

관련 문제