-1

현재 512MB 에뮬레이터에서 테스트 중입니다.내 readfile은 디버그 모드에서 작동하지만 릴리스 모드에서는 작동하지 않습니다. 무슨 일있어?

StorageFolder^ appFolder = Windows::ApplicationModel::Package::Current->InstalledLocation; 

String^ path = appFolder->Path; 

std::wstring testFileName = std::wstring(path->Begin(), path->End()) + std::wstring(L"\\full-R23-0000000000000000Mapped"); 

_CREATEFILE2_EXTENDED_PARAMETERS extend = { 0 }; 
extend.dwSize = sizeof(CREATEFILE2_EXTENDED_PARAMETERS); 
extend.dwFileAttributes = FILE_ATTRIBUTE_NORMAL; 
extend.dwFileFlags = FILE_FLAG_NO_BUFFERING | FILE_FLAG_OVERLAPPED; 
extend.dwSecurityQosFlags = SECURITY_ANONYMOUS; 
extend.lpSecurityAttributes = nullptr; 
extend.hTemplateFile = nullptr; 

HANDLE dataFile = CreateFile2(
    testFileName.c_str(), 
    GENERIC_READ | GENERIC_WRITE, 
    0, 
    OPEN_ALWAYS, 
    &extend); 

DWORD errcode = GetLastError(); 
OutputDebugString(L" Error Code: "); 
OutputDebugString(std::to_wstring(errcode).c_str()); 

OVERLAPPED positionalData = { 0 }; 
positionalData.Offset = 0; 
positionalData.OffsetHigh = 0; 
positionalData.hEvent = 0; 


byte* cacheTest = reinterpret_cast<byte*>(VirtualAlloc(
    NULL, 
    datasetReadSectorSize, 
    MEM_COMMIT | MEM_RESERVE, 
    PAGE_READWRITE)); 

bool readsuccess = ReadFile(
    dataFile, 
    &cacheTest[0], 
    datasetReadSectorSize, 
    NULL, 
    &positionalData); 

DWORD errcode2 = GetLastError(); 
OutputDebugString(L" Error Code 2: "); 
OutputDebugString(std::to_wstring(errcode2).c_str()); 

DWORD temp_sector_size = datasetReadSectorSize; 

GetOverlappedResult(
    dataFile, 
    &positionalData, 
    &temp_sector_size, 
    true); 

그러나,이 코드는 릴리스 모드에서 마지막 GetOverlappedResult 명령에 응답 : 나는 제대로 디버그 모드에서 수행하는 다음과 같은 코드가 있습니다. 디버그 모드에서 제공하는 오류 코드는 각각 183 및 997 (각각 ERROR_ALREADY_EXISTS 및 ERROR_IO_PENDING)이며 여기서도 문제가되지 않습니다. 릴리스 모드에서 제공하는 오류 코드는 각각 183 및 38입니다 (각각 ERROR_ALREADY_EXISTS 및 ERROR_HANDLE_EOF). 여기서 End of File 오류가 발생하는 것은 확실합니다. 액세스하는 파일은 프로젝트의 일부이며 구성 속성에서 build : NO (이 설정으로 두 가지 방법을 시도했습니다), Content : YES (이 옵션을 yes로 설정하면 디버그를 만드는 데 중요했습니다. 모드 작업) 및 항목 유형 : 빌드에 참여하지 않습니다 (이 설정에 영향을주지 않았습니다).

릴리스 모드가 디버그 모드와 일관되게 동작하도록하려면 어떻게해야합니까 (이 경우 성공적으로 파일을 수행합니까?).

+1

이것은 C++가 아니며 일부 언어 (아마도 C++/CLI)입니다. 이에 따라 다시 태그하십시오. –

+0

C++/CLI가 아니며 Windows Phone에서는 지원되지 않습니다. 그러나 요령이 찍혔습니다. – MNagy

+1

winapi 코드에서 흔히 발생하는 일반적인 깨진 오류 처리처럼 보입니다. winapi 함수가 실제로 실패하지 않았을 때 GetLastError() 값을 표시하면 임의의 숫자가 생성됩니다. –

답변

0

답변이 너무 간단하기 때문에 이것은 매우 당혹 스럽습니다. 내가 읽은 파일을 추가 할 때 (내가 디버그 빌드에있는 동안 추가했다), 속성 페이지를 편집 할 때 "Debug"에서 "모든 구성"으로 구성 속성을 변경하지 않았습니다. 변경 내 문제를 해결하고, 이제 ReadFile은 디버그 모드에서와 마찬가지로 릴리스 모드에서 작동합니다.

나는 많은 잘못된 나무를 짖고 있었다.

관련 문제