C#winform如何获取局域网中指定IP或是主机名称的所有文件夹名称

bangfj 2012-05-15 12:24:02
我程序的目的是通过局域网获取指定计算机上的所有盘符和文件夹名称。就像用openfiledialog控件一样打开的文件对话框。如果不能实现。那么如何获取这些文件夹名称呢?共享的文件夹也可以。请哪位大侠帮帮忙 感激之至!
...全文
959 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
effun 2012-05-15
  • 打赏
  • 举报
回复
你不觉得如果这样可行的话很没有安全感吗?不过作为技术讨论,我想应该至少有以下两种方法:

1、在远端电脑上种一个木马,通过这个木马程序读取磁盘信息。当然,这个木马可能只是你自己写的一个服务程序。
2、先把远端电脑所有盘符的根目录都共享,再在你的电脑上与它建立连接,当然可能会需要用户名和密码什么的。然后用System.IO.Directory的GetDirectories和GetFiles两个方法读取所有的子目录和文件。
bangfj 2012-05-15
  • 打赏
  • 举报
回复
没有知道的吗啊????
bangfj 2012-05-15
  • 打赏
  • 举报
回复
自己先顶一下。最好是有代码 谢谢谢谢谢谢谢~~~~~~~~~~·
bangfj 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

selectPath 是服务器地址后面别忘了那个\ @"\\局域网目标ip地址\";
[/Quote]
老大 还在吗 我还有个小问题 就是如果要获取目标计算机的共享数据必须要账户和密码。那么账户和密码在这个方法中NetShareList(string server) 哪里写呢??
bangfj 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

C# code

using System.Collections;
using System.IO;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential)]
protected struct SHARE_INFO_1
{
[MarshalA……
[/Quote]
老大 你太强悍了 呜呜呜呜 谢谢谢谢谢谢谢~~~~绝对给力哈
叫我三三 2012-05-15
  • 打赏
  • 举报
回复
selectPath 是服务器地址后面别忘了那个\ @"\\局域网目标ip地址\";
叫我三三 2012-05-15
  • 打赏
  • 举报
回复

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..*/
});

}
bangfj 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 6 楼 的回复:
前面加
\\局域网目标ip地址\
\\局域网主机名\
其它和本地操作一样了

C# code

string selectPath = @"\\局域网目标ip地址\";
var dicInfo = new DirectoryInfo(selectPath);//选择的目录信息
FileInfo[] textFiles = dicInfo.GetFil……
[/Quote]
大侠您好,我按照你的代码 提示“UNC 路径的形式应为 \\server\share。”@"\\局域网目标ip地址\"最后的\后面写的share是哪里获取的
叫我三三 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
前面加
\\局域网目标ip地址\
\\局域网主机名\
其它和本地操作一样了
[/Quote]

string selectPath = @"\\局域网目标ip地址\";
var dicInfo = new DirectoryInfo(selectPath);//选择的目录信息
FileInfo[] textFiles = dicInfo.GetFiles("*.*", SearchOption.AllDirectories);//获取所有目录包含子目录下的文件

bangfj 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

前面加
\\局域网目标ip地址\
\\局域网主机名\
其它和本地操作一样了
[/Quote]
directoryInfo df=new directoryInfo("192.168.1.5");是这样吗???我的意思是用户不知道共享文件夹的目录 是想找到一个方法获取这些共享的目录
effun 2012-05-15
  • 打赏
  • 举报
回复
已经有人实现了你的需求

http://www.codeproject.com/Articles/2939/Network-Shares-and-UNC-paths
叫我三三 2012-05-15
  • 打赏
  • 举报
回复
前面加
\\局域网目标ip地址\
\\局域网主机名\
其它和本地操作一样了
bangfj 2012-05-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

你不觉得如果这样可行的话很没有安全感吗?不过作为技术讨论,我想应该至少有以下两种方法:

1、在远端电脑上种一个木马,通过这个木马程序读取磁盘信息。当然,这个木马可能只是你自己写的一个服务程序。
2、先把远端电脑所有盘符的根目录都共享,再在你的电脑上与它建立连接,当然可能会需要用户名和密码什么的。然后用System.IO.Directory的GetDirectories和GetFiles两……
[/Quote]
感谢你的意见,如果说是我只想获取局域网目标计算机上的所有共享文件夹名称及其子文件夹 通过directory怎么写代码 麻烦请告之 我新手 谢谢

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧