我想知道如何把输出流重定向(如net view)

newman0708 2003-11-06 08:53:32
我是想做一个局域网上的发送信息的工具(我见过别人做的,但没有源代码)

功能:
1.查看局域网上有多少台机器
2.发送功能

发送倒是不难,因为,它没有返回信息,而查看就不同了。

查看工作是通过net view来实现,
执行后,会有如下信息:
服务器名称 注释
-------------------------------------------
\\307-PICCOLO
\\4122-TWFGFBNJQK
\\54YTD
\\A-5C912CBFE7524
\\AFEI
\\ANUBIS Anubis
\\BAOYIMING BaoYiming
\\BEE
\\BINBIN

我对它进行解析后把人加入listbox。

但是,我现在不知道该怎么去把上面的这些信息 读取进来进行解析?

-------------------------------------------
请高手指点一下!
如有源代码的话,能否给个参考。

谢谢!

...全文
58 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fierygnu 2003-12-01
  • 打赏
  • 举报
回复
我这里没有环境。是用WinExec有问题吗?换成system调用试试。
newman0708 2003-12-01
  • 打赏
  • 举报
回复
在mfc的dialog窗口中,就是不行!

一到dos窗口中就没有问题!
fierygnu 2003-12-01
  • 打赏
  • 举报
回复
while (!feof(fp)) {
fgets(pbuff,length, fp);
this->m_szOutput+=pbuff;
}
代码有问题,要判断fgets的返回值。很多人都犯这个错误,应该是:
while (1) {
char *p = fgets(pbuff,length, fp);
if (feof(fp) || !p)
break;
this->m_szOutput += pbuff;
}

没有写入netview.txt的问题没看出来。给出全路径名试试。另外确保setCommand设置是正确的。
newman0708 2003-11-30
  • 打赏
  • 举报
回复
还有:
CString com;
com=this->m_szCommand+">netview.txt";
WinExec(com, NULL);//SW_SHOW

执行结果:
根本就没有写入到netview.txt文件中,不知道怎么回事!
应该怎么做?


to fierygnu :
我会另外开帖给你分数的。


newman0708 2003-11-30
  • 打赏
  • 举报
回复
//ConsoleData.h
#include "stdafx.h"

class ConsoleData{
public:
ConsoleData();
void setCommand(CString);//set command
CString getOutputString(); //get output string
private:
CString m_szCommand;
CString m_szOutput;
};


//ConsoleData.cpp
#include "stdafx.h"
#include "ConsoleData.h"

ConsoleData::ConsoleData(){
this->m_szCommand ="";
this->m_szOutput ="";
}

void ConsoleData::setCommand(CString command){//set command
this->m_szCommand =command;
}

CString ConsoleData::getOutputString(){ //get output string
//CString com;
//com=this->m_szCommand+">netview.txt";
//com="net view";// >F:\\my_bag\\C++_file\\Messager\\Debug\\netview.txt";//"net view >netview.txt";
//WinExec(com, NULL);//SW_SHOW
//Sleep(5000);
FILE *fp = _popen("net view", "r");
const int length=8;
char* pbuff;
char buff[length];
ZeroMemory(buff,length);
pbuff=buff;
this->m_szOutput="";

while (!feof(fp)) {
fgets(pbuff,length, fp);
this->m_szOutput+=pbuff;
}
return this->m_szOutput;
}

fierygnu 2003-11-08
  • 打赏
  • 举报
回复
这个好像不行。streambuf与原来的FILE没有什么关系。用C的接口不是也挺好吗?fgets读入后,用sscanf解析,很好用的。
newman0708 2003-11-07
  • 打赏
  • 举报
回复
能不能获取net view输出的流

最好是能将流重定向到一个strstream str中,然后,我就可以从str中读取内容了。

这种想法能否做到?

newman0708 2003-11-06
  • 打赏
  • 举报
回复
我要在程序进行处理,不是想写到文件中,自己慢慢看。
daizh 2003-11-06
  • 打赏
  • 举报
回复
net view > service_list.txt
然后你再对service_list.txt文件中的内容进行操作,从而取得你要的数据。
fierygnu 2003-11-06
  • 打赏
  • 举报
回复
用_popen接口:
FILE *fp = _popen("net view", "r");
while (!feof(fp)) {
fgets(..., fp);
...
}

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧