C++ 编写或复制Visual C++;控制台输出到文本文件

C++ 编写或复制Visual C++;控制台输出到文本文件,c++,visual-c++,visual-studio-2012,include,perceptual-sdk,C++,Visual C++,Visual Studio 2012,Include,Perceptual Sdk,我正在使用Intel Perceptive Computing SDK语音识别模块。SDK示例使用Microsoft Visual Studio 2012 Professional感知口述,并在处理语音输入后将其打印在控制台窗口上。我只想复制控制台窗口上打印的输出,并将其写入.txt文件。我遵循一般的方法,但不知何故,文件中的文本只是一些数字 // Callback for recognized commands and alerts class MyHandler: public PXCVoi

我正在使用Intel Perceptive Computing SDK语音识别模块。SDK示例使用Microsoft Visual Studio 2012 Professional感知口述,并在处理语音输入后将其打印在控制台窗口上。我只想复制控制台窗口上打印的输出,并将其写入
.txt
文件。我遵循一般的方法,但不知何故,文件中的文本只是一些数字

// Callback for recognized commands and alerts
class MyHandler: public PXCVoiceRecognition::Recognition::Handler, public    PXCVoiceRecognition::Alert::Handler 
{ 公众: MyHandler(std::vector和命令) {this->commands=commands;}

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;
virtualvoid PXCAPI onrecognition(PXCVoiceRecognition::Recognition*cmd)
{
wprintf_s(L“\n已识别:\n”,(cmd->label>=0)?命令[cmd->label]:cmd->dictation);//此行打印口述语句//
//写入文本文件
printf(“写入txt文件…”);
std::ofstreamout(“c:\\MyVoice.txt”);
露头植入(cmdl.m_iuid,PXCVoiceRecognition::CUID,(void**)和vc);
if(stsQueryProfile(i和profile);
sts=捕获.定位流(&profile.输入);
返回3;
}
如果(cmdl.m_realtime>=0)capture.SetRealtime(cmdl.m_realtime);
//设置PXCVoiceRecognition配置文件
if(cmdl.m_eos)profile.endOfSentence=cmdl.m_eos;
sts=vc->SetProfile(&profile);
//语法初始化
pxcUID语法=0;
if(cmdl.m_grammar.size()SetGrammar(grammar);
//订阅认知
MyHandler(cmdl.m_语法);
vc->订阅认知(80,&handler);
vc->subscribebealert(&handler);
//处理循环
PXCSmartPtr音频;
pxcsmartraysps(3);
wprintf_s(L“按任意键退出\n”);
而(!\u kbhit())
{
sts=capture.ReadStreamAsync(audio.ReleaseRef(),sps.ReleaseRef(0));
sts=vc->ProcessAudioAsync(音频,sps.ReleaseRef(1));
sps.SynchronizeEx();
}

}

一般来说,如果您可以在控制台窗口中正确生成输出,那么您可以使用命令行参数运行可执行文件,如
>c:\result.txt
将标准输出重定向到文件(我假设您在Windows上,因为您有visual c++标记),因此您根本不需要更改代码(您放入
cout
的所有内容都将写入参数中指定的文件)。如果您使用的是Visual Studio GUI,则可以在项目的“属性”页中指定命令行参数,否则您可以在控制台窗口中手动键入命令。

您可以使用
重定向Visual Studio运行的命令的输出。通过在so中选择项目,将其添加到命令参数中lution explorer并单击项目->属性->配置属性->调试。然后在命令参数中输入
>output.txt
。运行应用程序后,该文件将显示在工作目录中-默认情况下,该目录与.sln文件的目录相同。

我想他只是建议运行execut能够并将其定向到文件:
C:\.exe>C:\output.txt


这是一个关于的链接。

是的,我使用的是windows 7。你能给我一个链接,详细说明你刚才描述的方法吗?你能格式化你的代码吗correctly@Sean我用这种方式格式化它时遇到了很大的麻烦。它不允许我发布更改。谢谢。这适用于普通应用程序。不知怎的,当我对这个做同样的操作时上面发布的语音识别代码,控制台没有发出任何信息。如果没有这些更改,它工作正常,并提供输出。但是除了生成一个空的txt文件外,对>output.txt没有任何作用。您的输出可能会转到stderr而不是stdout?要捕获stderr,您可以使用
2>output.txt
而不是
>。您也可以使用
>output.txt 2>&1
将两者合并到同一个文件中。这很好。但有一个转折点。程序执行得很好,也生成了一个txt文件。但它没有将控制台输出写入txt文件。(如果这有帮助的话)我想我的输出是unicode流,因为只有当我使用wprinf_s时,它才会在控制台上打印。它不能与printf或printf_s一起工作。@Rastaban
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();
}