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

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

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或是主机名称的所有文件夹及其搜索文件,布布扣,bubuko.com

时间: 2024-12-19 02:55:41

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

获取数据库中指定类型的数据库名称

/// <summary> /// 获取数据库名称 /// </summary> /// <param name="Account">帐套号</param> /// <returns></returns> public static string GetDBName(string Account) { StringBuilder strSql = new StringBuilder(); strSql.Append

java 获取局域网中的所有主机名和IP地址

DOS命令 命令 意义 net view 获取局域网中的所有主机名 ipconfig -all 获取本地IP,主机名,MAC地址 arp -a 获取本局域网中的所有IP地址和物理地址 ping -a x.x.x.x 获取x.x.x.x的主机名 nbtstat -a 主机名 获取MAC地址 java exec 执行外部命令 String command = "net view" Runtime r = Runtime.getRuntime(); Process p = r.exec(co

C# 获取本机mac地址 客户端主机名称(hostName) 当前用户(CurWinUser) 操作系统版本(WinVersion) IE浏览器版本(IEversion) 物理内存(Memory) 跳至网关的IP地址(IpAddress) CPU序列号 等等

关于获取本机信息的代码,园子里面还是非常多的,专门整理了一下此次用到的信息 首先,获取跳至网管的IP地址 #region 获取调至网管的IP地址 string ipAddress = GetLocalIp(); #endregion ///此方法需要计算机连网,否则获取不到IP地址 private string GetLocalIp() { string result = RunApp("route", "print", true); Match m = Regex

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

https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1.选择文件用OpenDialog OpenFileDialog dialog = new OpenFileDialog(); dialog.Multiselect = true;//该值确定是否可以选择多个文件 dialog.Title = "请选择文件夹"; dialog.Filter = "所有文件(*.*)|*.*"; if (dialog.ShowDial

获取字符串中指定位置开始的指定长度的字符串,支持汉字英文混合 汉字为2字节计数

#region 函数:GetSubString() 作用:获取字符串中指定位置开始的指定长度的字符串,支持汉字英文混合 汉字为2字节计数 /// <summary> /// 获取字符串中指定位置开始的指定长度的字符串,支持汉字英文混合 汉字为2字节计数 /// </summary> /// <param name="strSub">输入中英混合字符串</param> /// <param name="start"

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

js中获取URL中指定的搜索字符串,主要利用location对象实现,废话少说,上代码. 1 function getSearchString(key) { 2 // 获取URL中?之后的字符 3 var str = location.search; 4 str = str.substring(1,str.length); 5 6 // 以&分隔字符串,获得类似name=xiaoli这样的元素数组 7 var arr = str.split("&"); 8 var ob

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

<html> <head runat="server"> <title>演示获取Table的值</title> <script type ="text/javascript" language ="javascript" > // Description: 演示用JavaScript,获取Table中指定行.列元素值 // CopyRight: http://www.cnblogs.co

获取文件夹下所有文件(包括子文件)放在list&lt;File&gt;中

public static List<File> getAllFileList(File rootFile) { return getAllFileList(rootFile.getAbsolutePath(), null); } /** * 获取文件夹下所有文件(包括子文件) * * @param filePath * @param fileList * @return */ public static List<File> getAllFileList(String fileP

R8&mdash;批量生成文件夹,批量读取文件夹名称+R文件管理系统操作函数

一. 批量生成文件夹,批量读取文件夹名称 今日,工作中遇到这样一个问题:boss给我们提供了200多家公司的ID代码(如6007.7920等),需要根据这些ID号去搜索下载新闻,从而将下载到的新闻存到以公司ID生成的指定文件夹下!所以第一个问题就是200多个公司,不可能每一次下载,都要去点击:新建文件夹,然后对文件夹命名,too boring and monotonous.嘿嘿,幸好有R的陪伴! let's do it,来看看R如何完成这些工作! 主要用到两个函数 一. dir.create-生