获取局域网中指定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或是主机名称的所有文件夹及其搜索文件的更多相关文章
- Linux 下获取LAN中指定IP的网卡的MAC(物理地址)
// all.h// 2005/06/20,a.m. wenxy #ifndef _ALL_H#define _ALL_H #include <memory.h>#include < ...
- java 获取局域网中的全部主机名和IP地址
DOS命令 命令 意义 net view 获取局域网中的全部主机名 ipconfig -all 获取本地IP,主机名,MAC地址 arp -a 获取本局域网中的全部IP地址和物理地址 ping -a ...
- C#获取局域网中的所有正在使用的IP地址
方法不是很好. using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- 使用JS,获取URL中指定参数的值
/** * 获取URL中指定参数的值 * * @param name 参数名称 * @returns */ function getQueryString(name) { var reg = new ...
- C# 选择文件、选择文件夹、打开文件(或者文件夹) 路径中获取文件全路径、目录、扩展名、文件名称 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名!!
https://www.cnblogs.com/zhlziliaoku/p/5241097.html 1.选择文件用OpenDialog OpenFileDialog dialog = new Ope ...
- js中获取URL中指定的查询字符串
js中获取URL中指定的搜索字符串,主要利用location对象实现,废话少说,上代码. function getSearchString(key) { // 获取URL中?之后的字符 var str ...
- 转载: js jquery 获取当前页面的url,获取frameset中指定的页面的url(有修改)
转载网址:http://blog.csdn.net/bestlxm/article/details/6800077 js jquery 怎么获取当前页面的url,获取frameset中指定的页面的ur ...
- 用JavaScript,获取Table中指定的行、列
前言: 先要谢谢George Wing的慷慨赠书<悟透JavaScript>,让我更加感受到了技术交流的重要性,呵呵~ 进入正题,面试题中有一题:如何通过JavaScript获取Table ...
- pycharm中指定ip和端口
pycharm中指定ip和端口 环境: 系统:win7 本机ip:192.168.0.100 1.建立工程请参照:https://www.cnblogs.com/effortsing/p/103945 ...
随机推荐
- 关于offsetWidth,offsetHeight,offsetTop,offsetLeft和二维数组的声明
offsetWidth,offsetHeight,offsetTop,offsetLeft 为只读状态,返回的值是int形式 只读形式即不能通过修改其值的大小. 想要修改某元素的这些值的大小(widt ...
- 解决xftp远程连接中文乱码
更改乱码服务器的属性,使用UTF-8编码
- Dns 类
Dns 类型公开以下成员. 方法 名称 说明 BeginGetHostAddresses 异步返回指定主机的 Internet 协议 (IP) 地址. BeginGetHostByName ...
- 20169212《Linux内核原理与分析》课程总结
20169212<Linux内核原理与分析>课程总结 每周作业链接汇总 第一周作业:完成linux基础入门实验,了解一些基础的命令操作. 第二周作业:学习MOOC课程--计算机是如何工作的 ...
- Joomla
joomla Joomla实际有两个开源的东西: 1.Joomla内容管理系统即JoomlaCMS(Content Management System, CMS).它是网站的一个基础管理平台.几乎适合 ...
- navicat快捷键
ctrl+R.N 运行窗口sql ctrl+shift+r 运行选择sql ctr+q 打开窗口 ctrl+/ |ctrl+shift+/ 注释 | 解除 ctrl+L 删除一行的内容 ctr ...
- MongoDB 驱动以及分布式集群读取优先级设置
本文主要介绍使用MongoDB C驱动读取分布式MongoDB集群时遇到的坑,主要在读取优先级和匹配tag上:同时简单介绍Python驱动.Node.js驱动.Mongoose驱动如何使用读取优先级和 ...
- EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(五)
前言 在编写代码的时候,我遇到了很多关于EntityFramework6的疑问,所以现在就提前把这些问题列出来做一下解答,以便在以后的代码编写过程中减少不必要的Bug. EntityFramework ...
- Linux中常用操作命令
常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir ...
- 用HTML做的简单的个人简历
<html> <head> <title>table表格</title> <style type="text/css"> ...