共享目录

来源:互联网 发布:fgo下载数据有用吗 编辑:程序博客网 时间:2024/05/01 10:34
public string ConnectLan()
{
Process p;
p=new Process();
p.StartInfo.FileName="cmd.exe";


// 这里是关键点,不用Shell启动/重定向输入/重定向输出/不显示窗口
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;

p.Start();
p.StandardInput.WriteLine("net use ////Nt02 密码 /user:用户名");// 向cmd.exe输入command
p.StandardInput.WriteLine("exit");
p.WaitForExit();
string s = p.StandardOutput.ReadToEnd();// 得到cmd.exe的输出
p.Close();
return s;

}




终于知道怎么获取共享目录啦

[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;
}

//98没有这个函数?
[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[] NetShareEnum(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;

}