C ++ ofstream:无法找到输出文件

时间:2016-02-01 12:02:48

标签: c++ ofstream directx-12

我创建了一个默认的DirectX12应用程序(旋转的3D立方体),并在我的void DX::DeviceResources::Present()内我试图将后备缓冲区写入文件:

// Present the contents of the swap chain to the screen.
void DX::DeviceResources::Present()
{
    // The first argument instructs DXGI to block until VSync, putting the application
    // to sleep until the next VSync. This ensures we don't waste any cycles rendering
    // frames that will never be displayed to the screen.
    HRESULT hr = m_swapChain->Present(1, 0);

    UINT backBufferIndex = m_swapChain->GetCurrentBackBufferIndex();
    ComPtr<ID3D12Resource>         spBackBuffer;
    m_swapChain->GetBuffer(backBufferIndex, IID_PPV_ARGS(&spBackBuffer));

    //before writing the buffer, I want to check that the file is being 
    //created
    ofstream myfile;
    myfile.open("WHEREISTHEFILE.txt");
    myfile << "Writing this to a file.\n";
    myfile.close();

    // If the device was removed either by a disconnection or a driver upgrade, we 
    // must recreate all device resources.
    if (hr == DXGI_ERROR_DEVICE_REMOVED || hr == DXGI_ERROR_DEVICE_RESET)
    {
        m_deviceRemoved = true;
    }
    else
    {
        DX::ThrowIfFailed(hr);

        MoveToNextFrame();
    }
}

问题出现在这里:

ofstream myfile;
myfile.open("WHEREISTHEFILE.txt");
myfile << "Writing this to a file.\n";
myfile.close();

在尝试编写后台缓冲区的内容之前,我只想先编写一个文件(如图所示here)。现在,出于某种原因,我找不到输出文件......我已经搜索过所有目录,项目中的所有目录,甚至是Microsoft DirectX SDK文件夹。

没有抛出任何异常,我可以在调试时逐步执行每一行而不会出错。

它可能在哪里?

2 个答案:

答案 0 :(得分:1)

  

它可能在哪里?

通常文件位置是相对于当前工作目录的,即WHEREISTHEFILE.txt应位于启动程序时所在的目录中。

您可以通过GetCurrentDirectory()在程序中确定该目录,并通过SetCurrentDirectory()将其更改为其他内容。

但你没有检查.open()是否成功,所以写作可能完全失败,例如由于权限不足......?!

答案 1 :(得分:1)

它应该在您的项目目录中。如果您使用的是Visual Studio,则可以右键单击解决方案,然后单击“文件资源管理器”中的“打开文件夹”。

图片:Open folder in File explorer

(我这样嵌入它是因为我需要10个声望来直接发布图像)

现在使用您的代码,无法确定您的程序是否实际上能够打开输出文件。我建议你使用这样的东西:

std::ofstream outputFile("./myOutput.txt");
    if (outputFile.fail())
    {
        std::cout << "Failed to open outputfile.\n";
    }
outputFile << "I like trains.";
outputFile.close();

第一行是初始化,与.open()相同。还要注意路径前面的“./”,这不应该是强制性的,但这样做不会有害(这意味着你当前的目录)。 关于这段代码的重要部分是.fail()检查,如果你的程序无法打开输出文件,你将无法在任何地方找到它。希望这有帮助!