-1

하드 드라이브의 파일을 삭제하는 C++ programfind가 있습니다. 그래서 프로그램은 파티션의 시작 부분부터 읽기 시작하고 유효한 서명을 볼 때마다 그 내용을 읽고 어떤 종류의 파일인지에 따라 파일 크기를 찾습니다.Windows에서 오프셋 및 크기로 RAM에 파일을 매핑하는 방법

그런 다음 파일의 시작 크기와 오프셋을 데이터베이스에 저장합니다. 이제이 프로세스가 완료되면 일부 분석기에 파일을 제공하고 싶습니다.

지금 내가하고있는 일은 하드에 파일을 복구 한 다음 분석기에 주소를 제공하는 것입니다. 하지만 너무 길어요.

파일 주소 오프셋 및 파일 크기를 가져 오는 가상 파일 시스템에서이 파일을 RAM에로드하려면 분석기가 파일을 읽을 수있는 가상 주소를 fopen()으로 지정하면 속도는 빨라지지만 그렇지는 않습니다. 파티션에 파일을 쓰고 싶습니다.

사실 파일은 파티션에 있지만 파일 시스템 테이블에는 존재하지 않았습니다.

이 방법에 대한 해결책이 있습니까?

답변

0

알아 두어야 할 간단한 트릭이 있습니다. 알고 계시 겠지만 CreateFile으로 전화하십시오. 그러나 FILE_ATTRIBUTE_TEMPORARY을 전달하십시오. 이것은 사용 직후 파일을 삭제하려고 할 때 Windows에 파일을 RAM에 보관할 것을 강하게 암시합니다.

FILE_FLAG_DELETE_ON_CLOSE을 전달하면 더 쉽게 작업 할 수 있습니다.

+0

파일을 디스크에 저장하고 싶지 않습니다. 파일 오프셋과 크기가 있습니다. 하드에 writting하지 않고 파일로 ram 파일을 가져오고 싶습니다. 다른 말로하면 매핑 할 RAM에 스트림이 있습니다. 하드 디스크에 파티션을 만들었습니다. –

+0

RAM에 있는지 여부는 알 수 없습니까? 가상 주소 공간이있는 최신 OS가 아닙니다. RAM에 있다고 생각할 수도 있고 실제로 디스크에 스왑 아웃되어 있습니다. 또는 반대로 디스크에 있다고 생각할 수도 있지만 실제로는 파일 캐시에 있습니다. 나는 네가하는 말을 안다.하지만 나는 윈도우가 당신의 정신 모델과 얼마나 흡사한지 알고있다. – MSalters

관련 문제