博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【分享】采用CMD/WMI获取共享文件夹——及2种方式的性能对比
阅读量:5973 次
发布时间:2019-06-19

本文共 3047 字,大约阅读时间需要 10 分钟。

  之前在网上看到有朋友写了篇关于“如何用C#获取本地计算机共享文件夹”的文章,看了下代码用的是WMI方式,也就是调用System.Management中的类和方法,来获取计算机共享文件夹。我记得自己几年前有个项目需要获取硬件信息,当时用的也是WMI方式,留给自己的印象是WMI挺慢的。所以就动手写了个测试,发现WMI方式获取共享文件夹其时并不慢,也许只是获取某些特定硬件信息时才慢吧。

 

  我写的测试示例,包含两个测试,一种是用CMD方式,另一种是WMI方式,我的测试结果是CMD比WMI方式要慢一些,毕竟启动线程是要花时间的。其中WMI方式大家应该都懂,CMD方式是使用C#调用cmd.exe并接收命令行所返回的信息,如果需要做PING或调用控件台命令时,可能会用到,所以一起分享给大家吧。

  

  示例我是采用自己开发的EasyCode.Net来设计和生成的,关于EasyCode.Net代码生成器可以参见:

  

 

  本示例的相关界面截图及代码如下:

 

 

 

相关获取共享文件夹的代码:

using System;using System.Diagnostics;using System.Management;using System.Collections.Generic;using System.Text;namespace BudStudio.NetShare.SFL{    public class NetShareHelper    {        ///         /// WMI方式获取共享文件夹        ///         public static string GetNetShareByWMI()        {            Stopwatch stopwatch = new Stopwatch();            stopwatch.Start();            ManagementObjectSearcher searcher = new ManagementObjectSearcher("select  *  from  win32_share");            string shareFolders = "";            foreach (ManagementObject share in searcher.Get())            {                try                {                    shareFolders += share["Name"].ToString();                    shareFolders += " - ";                    shareFolders += share["Path"].ToString();                    shareFolders += "\r\n";                }                catch (Exception ex)                {                    throw new CustomException(ex.Message, ExceptionType.Warn);                }            }            stopwatch.Stop();            shareFolders += "总计用时:" + stopwatch.ElapsedMilliseconds.ToString() + "毫秒";            return shareFolders;        }        ///         /// CMD方式获取共享文件夹        ///         /// 目标主机IP或名称        public static string GetNetShareByCMD(string targetMachine)        {            Stopwatch stopwatch = new Stopwatch();            stopwatch.Start();            string shareFolders = "";            try            {                shareFolders = Cmd("Net View \\\\" + targetMachine);            }            catch (Exception ex)            {                throw new CustomException(ex.Message, ExceptionType.Warn);            }            stopwatch.Stop();            shareFolders += "总计用时:" + stopwatch.ElapsedMilliseconds.ToString() + "毫秒";            return shareFolders;        }        private static string Cmd(string cmd)        {            Process p = new Process();            p.StartInfo.FileName = "cmd.exe";            p.StartInfo.UseShellExecute = false;            p.StartInfo.RedirectStandardInput = true;            p.StartInfo.RedirectStandardOutput = true;            p.StartInfo.RedirectStandardError = true;            p.StartInfo.CreateNoWindow = true;            p.Start();            p.StandardInput.AutoFlush = true;            p.StandardInput.WriteLine(cmd);            p.StandardInput.WriteLine("exit");            string strRst = p.StandardOutput.ReadToEnd();            p.WaitForExit();            p.Close();            return strRst;        }    }}

 

本示例中的源代码下载:

转载于:https://www.cnblogs.com/BudEasyCode/archive/2012/03/18/2405354.html

你可能感兴趣的文章
分享Silverlight/Windows8/WPF/WP7/HTML5一周学习导读(5月14日-5月20日)
查看>>
前端攻略系列
查看>>
Perl最佳实践读书笔记-第一章
查看>>
IOS 7 更改导航栏文字到白色
查看>>
2016第22周五
查看>>
VC++ ToolTip的简单使用
查看>>
C#网络编程(接收文件) - Part.5
查看>>
启动spring boot项目
查看>>
Python ElasticSearch API
查看>>
生活随笔:买电脑配件好像在选人品商家一样
查看>>
系统上线后与客户的紧密关系
查看>>
技巧:在Silverlight中如何访问外部xap文件中UserControl
查看>>
winform datagridview 定制用户数据
查看>>
textarea表单
查看>>
linux 常用命令
查看>>
PHP的分页处理技术和一些常用的技术
查看>>
网页网站收集
查看>>
XMOVE3.0手持终端——软件介绍(一):精简型嵌入式管理系统的菜单实现和任务切换...
查看>>
c++截取汉字和英文混合字符串
查看>>
解决 Iis7中的“ISAPI 和 CGI 限制”错误
查看>>