110,529
社区成员
发帖
与我相关
我的任务
分享
using System.Collections;
using System.IO;
using System.Runtime.InteropServices;
[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;
}
private void button1_Click(object sender, EventArgs e)
{
string selectPath = @textBox1.Text.Trim();
string[] ShareList = NetShareList(selectPath);
Array.ForEach(ShareList, Share => {
string sharePath = selectPath + Share;
var dicInfo = new DirectoryInfo(sharePath);//选择的目录信息
FileInfo[] textFiles = dicInfo.GetFiles("*.*", SearchOption.AllDirectories);
/*..Dosomething..*/
});
}
string selectPath = @"\\局域网目标ip地址\";
var dicInfo = new DirectoryInfo(selectPath);//选择的目录信息
FileInfo[] textFiles = dicInfo.GetFiles("*.*", SearchOption.AllDirectories);//获取所有目录包含子目录下的文件