使用Borland C++执行dos命令并保存输出
Executing dos commands with Borland C++ and saving output
C++新手。
我下午大部分时间都在寻找,有人知道执行DOS命令并保存到windows窗体应用程序变量的简单方法吗?
您可以使用system("dir");
。这将显示命令提示符并运行dir命令。
或者,您也可以使用WinExec。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms687393(v=vs.85).aspx
您可以使命令重定向到一个文本文件,并读取它。
bool execDosCommand(char *command, AnsiString &output)
{
SECURITY_ATTRIBUTES sa;
ZeroMemory(&sa,sizeof(SECURITY_ATTRIBUTES));
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle=true;
sa.lpSecurityDescriptor=NULL;
HANDLE ReadPipeHandle;
HANDLE WritePipeHandle; // not used here
if(!CreatePipe(&ReadPipeHandle, &WritePipeHandle, &sa, 0))
return false;
STARTUPINFOA si;
ZeroMemory(&si,sizeof(STARTUPINFO));
si.cb=sizeof(STARTUPINFO);
si.dwFlags=STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow=SW_HIDE;
si.hStdOutput=WritePipeHandle;
si.hStdError=WritePipeHandle;
PROCESS_INFORMATION pi;
ZeroMemory(&pi,sizeof(PROCESS_INFORMATION));
text cmd;
cmd.print("/c %s", command);
char pathbuf[MAX_PATH];
_searchenv("CMD.EXE", "PATH", pathbuf);
if(!CreateProcessA(pathbuf, cmd.t_str(), NULL, NULL, true, 0, NULL, NULL, &si, &pi))
return false;
char Data[1024];
for (;;)
{
DWORD BytesRead;
DWORD TotalBytes;
DWORD BytesLeft;
if(!PeekNamedPipe(ReadPipeHandle,Data,sizeof(Data),&BytesRead, &TotalBytes,&BytesLeft)) return false;
if(BytesRead)
{
if(!ReadFile(ReadPipeHandle,Data,sizeof(Data)-1,&BytesRead,NULL))
return false;
Data[BytesRead]=' ';
output += Data;
}
else
{
if(WaitForSingleObject(pi.hProcess,0)==WAIT_OBJECT_0)
break;
}
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(ReadPipeHandle);
CloseHandle(WritePipeHandle);
return true;
}
例如:execDosCommand("dir C:\",输出);
正如roymustang所提到的,您可以使用系统命令从系统中执行另一个命令。例如,这可以是一个批处理脚本,它将命令的输出通过管道传输到文本文件中。然后,您可以读取文本文件以实际获取信息。"返回"命令输出的问题是,命令输出看起来如何?您将把它存储在什么数据结构中?大多数时候,你会得到一堆未格式化的文本,这些文本无法轻松解析,因此没有真正的通用方法将应用程序或脚本的输出返回到C++数据结构中。
你不妨看看这里:http://docwiki.embarcadero.com/RADStudio/en/System,_系统
就像上面描述的那样,我不相信有一种方法可以将应用程序调用的输出返回到程序中,至少我从未听说过这种方法。
贪婪,
Florian
相关文章:
- 我将如何保存此 for 循环的输出
- 在 C++ 的文本文件中保存多个输出
- 如何以C++格式输出已保存.html文件中<a href>标签中的所有链接?
- 创建一个动态数组,包括汽车的年份和品牌,但无法保存我的第一个输出
- 文件不会将输出保存到文件中,并在 Linux C++奇怪地打印出一个字符串
- 将所有控制台输出数据保存到新的文本文件C++
- 如何将输出从终端保存到变量
- 在 C++ 中将编辑过的内文件保存到输出文件时出现问题
- 使用Borland C++执行dos命令并保存输出
- C++ 在退出 WINAPI 之前将控制台输出保存到文本文件(无 MFC)
- 旋转纹理 sfml 并将输出保存到文件
- 使用十六进制保存输出会增加空格
- c++将输出(数字)保存到一个数组中.一次两个数字
- 在运行时保存服务的输出
- 我如何在windows中获得PyErr_Print的输出或将其保存为字符串?
- 从.txt读取int,将其保存到vector,然后保存到输出文件
- c++ Qt和WinExec -保存CMD输出文件在特定的文件夹
- 使用FMOD将输出保存到磁盘
- 如何将C++控制台输出保存在文本文件中
- 使用 openCV c++ 示例代码执行抓取后保存输出图像