0

デフォルトの 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();

バックバッファの内容を書き込もうとする前に、最初にファイルを書きたいだけです(ここで方法を示しています)。なんらかの理由で、出力ファイルが見つかりません...プロジェクト内のすべてのディレクトリ、さらには Microsoft DirectX SDK フォルダーまで、あらゆる場所を検索しました。

例外はスローされず、エラーなしでデバッグ中に各行をステップ実行できます。

それはどこでしょうか?

4

2 に答える 2

2

それはどこでしょうか?

通常、ファイルの場所は現在の作業ディレクトリからの相対パスです。つまりWHEREISTHEFILE.txt、プログラムを開始したときのディレクトリに配置する必要があります。

を介してプログラム内のそのディレクトリを特定しGetCurrentDirectory()、 を介して別のディレクトリに変更できますSetCurrentDirectory()

しかし、.open()成功したかどうかを確認していないため、たとえば権限が不十分なために、書き込みが完全に失敗した可能性があります...?!

于 2016-02-01T12:05:14.383 に答える