Запись или копирование вывода консоли Visual C ++ в текстовый файл

Я работаю с модулем распознавания голоса Intel Perceptual Computing SDK. Используя Microsoft Visual Studio 2012 Professional, образец SDK распознает диктовку и после обработки голосового ввода выводит его на печать в окне консоли. Все, что я хочу сделать, это скопировать вывод, напечатанный в окне консоли, и записать его в .txt файл. Я следую общему пути, но каким-то образом текст, записанный в файле, представляет собой просто цифры.

// Callback for recognized commands and alerts
class MyHandler: public PXCVoiceRecognition::Recognition::Handler, public    PXCVoiceRecognition::Alert::Handler

{
общественности:
MyHandler (станд :: вектор &команд)
{это-> команды = команды; }

virtual void PXCAPI OnRecognized(PXCVoiceRecognition::Recognition *cmd)
{
wprintf_s(L"\nRecognized: <%s>\n", (cmd->label>=0)?commands[cmd->label]:cmd-    >dictation); //this line prints the dictated statement//
// writing to a text file
printf("Writing to the txt file...");
std::ofstream out("c:\\MyVoice.txt");
out<<cmd->dictation;
}

protected:
std::vector<pxcCHAR*> commands;

};

int wmain(int argc, wchar_t* argv[]) {
// Create session
PXCSmartPtr<PXCSession> session;
pxcStatus sts = PXCSession_Create(&session);
if (sts < PXC_STATUS_NO_ERROR) {
wprintf_s(L"Failed to create the PXCSession\n");
return 3;
}
// Parse command line
UtilCmdLine cmdl(session);
if (!cmdl.Parse(L"-file-iuid-grammar-sdname-realtime-eos",argc, argv)) return 1;

// Create PXCVoiceRecognition instance
PXCSmartPtr<PXCVoiceRecognition> vc;
sts=session->CreateImpl(cmdl.m_iuid, PXCVoiceRecognition::CUID, (void **)&vc);
if (sts<PXC_STATUS_NO_ERROR)
{
wprintf_s(L"Failed to create PXCVoiceRecognition\n");
return 3;
}

// Find and initilize capture module
UtilCaptureFile capture(session,cmdl.m_recordedFile,false);
if (cmdl.m_sdname) capture.SetFilter(cmdl.m_sdname);

// Query PXCVoiceRecognition profile
PXCVoiceRecognition::ProfileInfo profile;
for (int i=0;;i++)
{
sts=vc->QueryProfile(i, &profile);
sts=capture.LocateStreams(&profile.inputs);
return 3;
}
if (cmdl.m_realtime >= 0) capture.SetRealtime(cmdl.m_realtime);
// Set PXCVoiceRecognition profile
if (cmdl.m_eos) profile.endOfSentence = cmdl.m_eos;
sts=vc->SetProfile(&profile);

// Grammar intialization
pxcUID grammar = 0;
if (cmdl.m_grammar.size()<0)
{
wprintf_s(L"Dictation Mode\n");
}

vc->SetGrammar(grammar);
// SubscribeRecognition
MyHandler handler(cmdl.m_grammar);
vc->SubscribeRecognition(80, &handler);
vc->SubscribeAlert(&handler);

// Processing loop
PXCSmartPtr<PXCAudio> audio;
PXCSmartSPArray sps(3);
wprintf_s(L"Press any key to exit\n");

while (!_kbhit())
{
sts = capture.ReadStreamAsync(audio.ReleaseRef(),sps.ReleaseRef(0));
sts=vc->ProcessAudioAsync(audio,sps.ReleaseRef(1));
sps.SynchronizeEx();
}

}

11

Решение

Ты можешь использовать > перенаправить вывод команды, выполняемой Visual Studio. Добавьте его к аргументам команды, выбрав свой проект в обозревателе решений и нажав PROJECT-> Properties-> Configuration Configuration-> Debugging. Затем введите > output.txt в командные аргументы. После запуска приложения файл появится в рабочем каталоге, который по умолчанию является тем же каталогом, что и ваши файлы .sln.

20

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

Я думаю, что он просто предлагает запустить ваш исполняемый файл и направить его в файл:
C: \. Exe> C: \ output.txt

Вот ссылка о перенаправление.

2

Вообще говоря, если вы могли бы правильно выводить вывод в окне консоли, то вы можете просто запустить исполняемый файл с аргументом командной строки, например > c:\result.txt перенаправить стандартный вывод в файл (я предполагаю, что вы работаете в Windows, так как у вас есть тег visual-c ++), таким образом вам вообще не нужно менять код (все, что вы помещаете в cout будет записан в файл, указанный в аргументе). Если вы используете графический интерфейс Visual Studio, аргументы командной строки можно указать на странице свойств проекта, в противном случае вы можете просто набрать команду вручную в окне консоли.

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