我创建了一个默认的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文件夹。
没有抛出任何异常,我可以在调试时逐步执行每一行而不会出错。
它可能在哪里?
答案 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()检查,如果你的程序无法打开输出文件,你将无法在任何地方找到它。希望这有帮助!