C ++ ofstream: не удается найти выходной файл

Я создал приложение DirectX12 по умолчанию (вращающийся 3D-куб) и в моем void DX::DeviceResources::Present() Я пытаюсь записать backbuffer в файл:

// 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.

Нет никаких исключений, и я могу пройти по каждой строке во время отладки без ошибок.

Где это может быть?

0

Решение

Где это может быть?

Обычно расположение файла относительно вашего текущего рабочего каталога, т.е. WHEREISTHEFILE.txt должен находиться в любом каталоге, в котором вы находились при запуске программы.

Вы можете определить этот каталог в вашей программе через GetCurrentDirectory(), и изменить его на что-то еще через SetCurrentDirectory().

Но вы не проверяли, если .open() был успешным, поэтому запись могла вообще потерпеть неудачу, например, из-за недостаточных разрешений …?!

1

Другие решения

Это должно быть в каталоге вашего проекта. Если вы используете Visual Studio, вы можете щелкнуть правой кнопкой мыши свое решение и выбрать Открыть папку в проводнике.

Образ: Открыть папку в проводнике

(Я встроил это так, потому что мне нужно 10 репутации, чтобы опубликовать изображение напрямую)

Также с вашим кодом сейчас нет способа определить, действительно ли ваша программа может открыть выходной файл или нет. Я предлагаю вам использовать что-то вроде этого:

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

Первая строка — это инициализация, которая делает то же самое, что и .open (). Также обратите внимание на «./» перед путем, это не должно быть обязательным, но это не помешает сделать это (это означает ваш текущий каталог).
Важной частью этого фрагмента кода является проверка .fail (), если вашей программе не удалось открыть выходной файл, вы, конечно, не сможете найти его нигде. Надеюсь, это помогло!

1

По вопросам рекламы [email protected]