我的readfile工作在调试模式但不是发布模式。出了什么问题?

时间:2017-01-31 20:55:03

标签: .net visual-c++ file-io visual-studio-2015 windows-phone-8.1

目前正在512 MB仿真器上进行测试。我有以下代码在调试模式下正常执行:

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)。它在这里收到文件结束错误肯定让我很困惑。它访问的文件是项目的一部分,在其配置属性中,它设置为从构建中排除:否(我已尝试使用此设置两种方式),内容:是(将此设置为yes对于使调试模式工作至关重要)和项目类型:不参与构建(我还没有触及此设置)。

如何使发布模式与调试模式一致(在这种情况下,成功执行文件)?

1 个答案:

答案 0 :(得分:0)

嗯,这很令人尴尬,因为答案很简单。当我添加我正在阅读的文件时(我在调试版本中添加了它),编辑属性页面,我从未更改过配置属性&#34; Debug&#34;到&#34;所有配置&#34;。更改解决了我的问题,现在ReadFile在发布模式下工作,就像在调试模式下一样。

我一直在咆哮着这么多错误的树木。