내 readfile은 디버그 모드에서 작동하지만 릴리스 모드에서는 작동하지 않습니다. 무슨 일이야?

MGreat

현재 512MB 에뮬레이터에서 테스트 중입니다. 디버그 모드에서 제대로 수행되는 다음 코드가 있습니다.

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 오류가 발생한다는 것은 확실히 나를 당혹스럽게 만듭니다. 액세스하는 파일은 프로젝트의 일부이며 구성 속성에서 Excluded from build : NO (이 설정으로 두 가지 방법을 모두 시도했습니다), Content : YES (이를 yes로 설정하는 것은 디버그를 만드는 데 중요 함)로 설정됩니다. 모드 작업) 및 아이템 유형 : 빌드에 참여하지 않습니다 (이 설정을 건드리지 않았습니다).

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

MGreat

글쎄요, 대답이 너무 간단하기 때문에 이것은 꽤 부끄럽습니다. 내가 읽은 파일을 추가하고 (디버그 빌드에있는 동안 추가 함) 속성 페이지를 편집 할 때 구성 속성을 "디버그"에서 "모든 구성"으로 변경하지 않았습니다. 그것을 변경하면 내 문제가 해결되었으며 이제 ReadFile은 디버그 모드에서와 마찬가지로 릴리스 모드에서 작동합니다.

나는 너무 많은 잘못된 나무를 짖었습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관