2009-12-16 14 views
2

파일을 축소하려고합니다.
한 파일의 내용을 다른 파일의 내용으로 바꾸고, 끝나면 원본 파일이 dest 파일보다 작 으면 dest 파일이 올바르게 축소되는지 확인하려고합니다.파일 크기 조정 (내림차순)

(이유 : 이명 령 파일은 백업과 미디어에 기록하는 것은 매우 비싼, 그래서 나는 단지 백업 델타 쓰기 때문에)

1.) HANDLE hDest =(HANDLE)_get_osfhandle(fileno(backupFile.GetBufferedHandle())); 
2.) DWORD startingSize = GetFileSize(hDest, NULL); 
3.) DWORD dwPtr = SetFilePointer(hDest, newSize, NULL, FILE_BEGIN); 
4.) int err = GetLastError(); 
5.) if (dwPtr != INVALID_SET_FILE_POINTER) 
6.) { err = SetEndOfFile(hDest); 
7.)  if(err == 0) 
8.)   err = GetLastError(); 
9.)  err = SetFileValidData(hDest, newSize); 
10.) } 
11.) DWORD endingSize = GetFileSize(hDest, NULL); 

내가 8 행에 오류가납니다을 그 1224입니다 ... 누군가가 저에게 이유를 말할 수 있는지, 또는 더 나은 접근 방법을 제안 할 수 있는지 궁금합니다.

답변

3

"net helpmsg 1224"-> 사용자 매핑 섹션이 열려있는 파일에서 요청한 작업을 수행 할 수 없습니다.

그리고 SetEndOfFile에 대한 MSDN에서

:

하여 CreateFileMapping이 HFILE에 대한 파일 매핑 개체를 만들 에 호출되는 경우는, UnmapViewOfFile 파일 매핑을 닫 모든 뷰 매핑을 해제하고 하여 CloseHandle를 호출 먼저 호출해야 SetEndOfFile을 호출하기 전에 개체를 호출하십시오.

+0

2 분 후에 나를 이길 : P –

+0

고맙습니다 .. 파일 (새 휠)을 여는 데 사용했던 클래스가 매핑을 수행하고 있습니다. 코드를 기본 fopen으로 가져 왔을 때 제대로 작동했습니다. – baash05

+0

"net helpmsg"에 감사드립니다. 이제는 마침내 ERRLOOK.EXE를 제거 할 수 있습니다. –

-2

성공 (ERROR_SUCCESS)을 의미하는 0의 오류 코드가 있으며 작동합니다 (제공된 샘플의 6 행 참조). 지금 라인 7에서 수표를받은 직후에 GetLastError으로 전화 한 이유는 무엇입니까? 그건 그렇고, 난 당신이 0 대신 ERROR_SUCCESS를 사용해야한다고 생각합니다. 오류 코드에 대한 참조는 here 찾을 수 있습니다. 아니면 9 번 라인에서 실제로 발생 했습니까?

이것을 확인할 수 있습니까? 희망 사항 : 감사합니다. 탐.

+0

'SetEndOfFile'은 실패시 0을 반환합니다. http://msdn.microsoft.com/en-us/library/aa365531%28VS.85%29.aspx를 참조하십시오. –

+0

@BillyONeal ... Whoopsie! 내 나쁜! ... tis 늦게 나를 위해, 잠이 필요해 ... 나는 나의 오해에 대해 사과 ... : (죄송합니다 – t0mm13b

0

그 오류가 The requested operation cannot be performed on a file with a user-mapped section open.

로 변환 당신은 어떤 메모리는 해당 파일의 세그먼트를 매핑해야합니까?

+0

난 그렇게 생각하지 않아 .. 내가 사용자 정의 파일 라이브러리를 사용하고 있습니다 (예 새로 발명 된 휠) 내가 파야 겠어. – baash05

관련 문제