最近做个功能在局域网中所有指定文件,于是花了点精力完成了部分功能,先贴上

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data; using System.Drawing;

using System.IO; using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Collections;

using System.Runtime.InteropServices;

using System.Diagnostics;

namespace QuickSearchToolsInNet {

public partial class Form1 : Form     {

public Form1()         {

InitializeComponent();

}

private void btnSearch_Click(object sender, EventArgs e)         {

#region 此部分主要为了测试一台计算机,数量太多搜索速度会很慢

IList<string> lstIps = GetIpsByGroup();

string ip = @"\\ckf4989v";

string selectPath = @"c:\";

foreach (var item in lstIps)             {

if (item.ToLower().Contains(ip))                 {                     selectPath = ip + @"\";                 }             }

#endregion

string[] ShareList = NetShareList(selectPath);

FileInfo[] textFiles = null;

Array.ForEach(ShareList, Share => {

string sharePath = selectPath + Share;

var dicInfo = new DirectoryInfo(sharePath);//选择的目录信息

textFiles = dicInfo.GetFiles("*.*", SearchOption.AllDirectories);

});

StringBuilder sb = new StringBuilder();

if (textFiles!=null)             {

foreach (var item in textFiles)                 {

sb.Append(item.FullName+"\r\n");

}             }

this.richTextBox1.Text = sb.ToString();

//DirectoryInfo dir = new DirectoryInfo(ip);

//StringBuilder sb = Getfiless(dir);

//MessageBox.Show(sb.ToString());

}

#region   获取局域网中某个计算机的所有共享文件夹

[StructLayout(LayoutKind.Sequential)]

protected struct SHARE_INFO_1         {

[MarshalAs(UnmanagedType.LPWStr)]

public string shi1_netname;

[MarshalAs(UnmanagedType.U4)]

public uint shi1_type;

[MarshalAs(UnmanagedType.LPWStr)]

public string shi1_remark;

}

[DllImport("Netapi32.dll", EntryPoint = "NetShareEnum")]

protected static extern int NetShareEnum(

[MarshalAs(UnmanagedType.LPWStr)] string servername,

[MarshalAs(UnmanagedType.U4)] uint level,         out IntPtr bufptr,

[MarshalAs(UnmanagedType.U4)] int prefmaxlen,

[MarshalAs(UnmanagedType.U4)] out uint entriesread,

[MarshalAs(UnmanagedType.U4)] out uint totalentries,

[MarshalAs(UnmanagedType.U4)] out uint resume_handle

);

private string[] NetShareList(string server)         {

IntPtr buffer;             uint entriesread;             uint totalentries;             uint resume_handle;

//-1应该是获取所有的share,msdn里面的例子是这么写的,返回0表示成功

if (NetShareEnum(server, 1, out buffer, -1, out entriesread, out totalentries, out resume_handle) == 0)             {

Int32 ptr = buffer.ToInt32();

ArrayList alShare = new ArrayList();

for (int i = 0; i < entriesread; i++)                 {

SHARE_INFO_1 shareInfo = (SHARE_INFO_1)Marshal.PtrToStructure(new IntPtr(ptr), typeof(SHARE_INFO_1));                     if (shareInfo.shi1_type == 0)//Disk drive类型                     {

alShare.Add(shareInfo.shi1_netname);

}

ptr += Marshal.SizeOf(shareInfo);//有点类似C代码

}

string[] share = new string[alShare.Count];

for (int i = 0; i < alShare.Count; i++)                 {                     share[i] = alShare[i].ToString();                 }                 return share;             }

else                 return null;

}

#endregion

#region 获取工作组中所有计算机名

private IList<string> GetIpsByGroup()         {

ProcessStartInfo info = new ProcessStartInfo("cmd.exe");

info.Arguments = "/k net view";            //不使用壳来执行进程,才能捕获输入输出流

info.UseShellExecute = false;            //重定向输入流

//info.RedirectStandardInput = true;

info.RedirectStandardOutput = true;      //重定向输出流

Process p = Process.Start(info);

StreamReader output = p.StandardOutput;     //获取输出流的操作Writer

IList<string> lstIps = new List<string>();

while (!output.EndOfStream)             {                 string line = output.ReadLine();                 if (line.StartsWith("\\\\"))                     lstIps.Add(line);             }             return lstIps;         }

#endregion

#region 递归获取某个目录下的所有文件(包含子目录中的文件)------------------已废弃

/// <summary>         /// 递归获取某个目录下的所有文件(包含子目录中的文件)------------------已废弃         /// </summary>

/// <param name="dir">最外层文件夹路径</param>

/// <returns></returns>

private StringBuilder Getfiless(DirectoryInfo dir)         {

FileInfo[] files = dir.GetFiles();

StringBuilder sb = new StringBuilder();

foreach (var item in files)             {

sb.Append(item.FullName + "\r\n");

}

if (dir.GetDirectories().Length > 0)             {

DirectoryInfo[] dirs = dir.GetDirectories();

foreach (var item in dirs)                 {

sb.Append(Getfiless(item) + "\r\n");

}             }

return sb;         }

#endregion

} }

获取局域网中指定IP或是主机名称的所有文件夹及其搜索文件的更多相关文章

  1. Linux 下获取LAN中指定IP的网卡的MAC(物理地址)

    // all.h// 2005/06/20,a.m. wenxy #ifndef _ALL_H#define _ALL_H #include <memory.h>#include < ...

  2. java 获取局域网中的全部主机名和IP地址

    DOS命令 命令 意义 net view 获取局域网中的全部主机名 ipconfig -all 获取本地IP,主机名,MAC地址 arp -a 获取本局域网中的全部IP地址和物理地址 ping -a ...

  3. C#获取局域网中的所有正在使用的IP地址

    方法不是很好. using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  4. 使用JS,获取URL中指定参数的值

    /** * 获取URL中指定参数的值 * * @param name 参数名称 * @returns */ function getQueryString(name) { var reg = new ...

  5. C# 选择文件、选择文件夹、打开文件(或者文件夹) 路径中获取文件全路径、目录、扩展名、文件名称 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名!!

    https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1.选择文件用OpenDialog OpenFileDialog dialog = new Ope ...

  6. js中获取URL中指定的查询字符串

    js中获取URL中指定的搜索字符串,主要利用location对象实现,废话少说,上代码. function getSearchString(key) { // 获取URL中?之后的字符 var str ...

  7. 转载: js jquery 获取当前页面的url,获取frameset中指定的页面的url(有修改)

    转载网址:http://blog.csdn.net/bestlxm/article/details/6800077 js jquery 怎么获取当前页面的url,获取frameset中指定的页面的ur ...

  8. 用JavaScript,获取Table中指定的行、列

    前言: 先要谢谢George Wing的慷慨赠书<悟透JavaScript>,让我更加感受到了技术交流的重要性,呵呵~ 进入正题,面试题中有一题:如何通过JavaScript获取Table ...

  9. pycharm中指定ip和端口

    pycharm中指定ip和端口 环境: 系统:win7 本机ip:192.168.0.100 1.建立工程请参照:https://www.cnblogs.com/effortsing/p/103945 ...

随机推荐

  1. ajax中使用post传值数组array

    如果我们在data中想放入array的参数,根据在网上搜索的结果有如下方法,但是没有一个成功的……我还是贴出来,别人成功了,也许是我哪里不对,日后也许还有机会研究..在文章的最后贴出了转化为json的 ...

  2. git pull提示当前不在某个分支上

    $ git pull You are not currently on a branch, so I cannot use any 'branch.<branchname>.merge' ...

  3. 判断iframe是否加载完成的完美方法

    var iframe = document.createElement("iframe"); iframe.src = "http://www.jb51.net" ...

  4. c#数据绑定(5)--LINQ

    嶽永鹏/文 本实例以MS AdventureWorks2008Entities数据库为基础,演示了LINQ TO ENTITY.LINQ TO ENTITYSQL和LINQ TO ENTITYCLIE ...

  5. Takeown--夺取文件or文件夹所有权

    强制将当前目录下的所有文件及文件夹.子文件夹下的所有者更改为管理员组(administrators)命令:takeown /f * /a /r /d y 将所有d:\documents目录下的文件.子 ...

  6. explain 执行计划详解

    id:id是一组数字,表示查询中执行select子句或操作表的顺序,如果id相同,则执行顺序从上至下,如果是子查询,id的序号会递增,id越大则优先级越高,越先会被执行. id列为null的就表是这是 ...

  7. 工具 cocoapods和插件

    命令行更新(安装)步骤 $ sudo gem update --system // 先更新gem,国内需要切换源 $ gem sources --remove https://rubygems.org ...

  8. POJ2774 (后缀数组)

    #include<cstdio> #include<cstring> using namespace std; ],b[]; ],x[],wv[],ws[],h[],rank[ ...

  9. 第三篇:Retrofit SDK的设计思路

    2016-05-08 15:24:03 Retreofit毫无疑问是一个优美的开源框架,有轻量级.耦合性低.扩展性好.灵活性高的特点,那么Retrofit的设计者们到底是怎么样做到这些的呢?我希望能够 ...

  10. Mallet 使用说明

    Mallet:自然语言处理工具包 发表于128 天前 ⁄ 技术, 科研 ⁄ 评论数 6 ⁄ 被围观 1006 Views+ MALLET是基于java的自然语言处理工具箱,包括分档得分类.句类.主题模 ...