如何用C#访问网络邻居的共享文件夹无法访问

本网站所发布软件均收集自网络,如侵犯版权请联系删除!系统之家 版权所有 2008 - 2014读取共享目录文件的2种方式_xwyo_新浪博客
读取共享目录文件的2种方式
第一种:建立磁盘映射方式&WNetAddConnection2A
​通过WNetAddConnection2A
API将共享目录映射为本地磁盘,之后即可按本地文件形式访问文件,最后断开连接。
调试的过程中,开始经常返回1219,很是无奈,后来​测试第二种方法后再回头测试此方法时却再没出现1219错误,很是无奈,感觉像是打通了任督二脉,也不知道啥原因。
第二种:使用net
后台调用cmd运行“net
use \\path /User:user password /PERSISTENT:YES​”命令,获取共享目录的权限,即可访问共享目录下的文件了。
事实上,​都是为了通过账号密码获取权限。
第一中方法代码:WNetAddConnection2A
namespace test
& & public enum
& ERROR_SUCCESS = 0, &//
& ERROR_BUSY = 170,
& ERROR_MORE_DATA = 234,
& ERROR_NO_BROWSER_SERVERS_FOUND =
& ERROR_INVALID_LEVEL = 124,
& ERROR_ACCESS_DENIED = 5,
& ERROR_INVALID_PASSWORD = 86,
& ERROR_INVALID_PARAMETER = 87,
& ERROR_BAD_DEV_TYPE = 66,
& ERROR_NOT_ENOUGH_MEMORY = 8,
& ERROR_NETWORK_BUSY = 54,
& ERROR_BAD_NETPATH = 53,
& ERROR_NO_NETWORK = 1222,
& ERROR_INVALID_HANDLE_STATE = 1609,
& ERROR_EXTENDED_ERROR = 1208,
& ERROR_DEVICE_ALREADY_REMEMBERED =
& ERROR_NO_NET_OR_BAD_PATH = 1203,
& ERROR_SESSION_CREDENTIAL_CONFLICT = 1219
//资源管理器中已经打开了该目录
& & public enum
RESOURCE_SCOPE
& RESOURCE_CONNECTED = 1,
& RESOURCE_GLOBALNET = 2,
& RESOURCE_REMEMBERED = 3,
& RESOURCE_RECENT = 4,
& RESOURCE_CONTEXT = 5
& & public enum
RESOURCE_TYPE
& RESOURCETYPE_ANY = 0,
& RESOURCETYPE_DISK = 1,
& RESOURCETYPE_PRINT = 2,
& RESOURCETYPE_RESERVED = 8,
& & public enum
RESOURCE_USAGE
& RESOURCEUSAGE_CONNECTABLE = 1,
& RESOURCEUSAGE_CONTAINER = 2,
& RESOURCEUSAGE_NOLOCALDEVICE = 4,
& RESOURCEUSAGE_SIBLING = 8,
& RESOURCEUSAGE_ATTACHED = 16,
& RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE |
RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
& & public enum
RESOURCE_DISPLAYTYPE
& RESOURCEDISPLAYTYPE_GENERIC = 0,
& RESOURCEDISPLAYTYPE_DOMAIN = 1,
& RESOURCEDISPLAYTYPE_SERVER = 2,
& RESOURCEDISPLAYTYPE_SHARE = 3,
& RESOURCEDISPLAYTYPE_FILE = 4,
& RESOURCEDISPLAYTYPE_GROUP = 5,
& RESOURCEDISPLAYTYPE_NETWORK = 6,
& RESOURCEDISPLAYTYPE_ROOT = 7,
& RESOURCEDISPLAYTYPE_SHAREADMIN = 8,
& RESOURCEDISPLAYTYPE_DIRECTORY = 9,
& RESOURCEDISPLAYTYPE_TREE = 10,
& RESOURCEDISPLAYTYPE_NDSCONTAINER = 11
[StructLayout(LayoutKind.Sequential)]
& & public struct
NETRESOURCE
& public RESOURCE_SCOPE dwS
& public RESOURCE_TYPE dwT
& public RESOURCE_DISPLAYTYPE
dwDisplayT
& public RESOURCE_USAGE dwU
& [MarshalAs(UnmanagedType.LPStr)]
& public string lpLocalN
& [MarshalAs(UnmanagedType.LPStr)]
& public string lpRemoteN
& [MarshalAs(UnmanagedType.LPStr)]
& public string lpC
& [MarshalAs(UnmanagedType.LPStr)]
& public string lpP
& & public class
NetworkConnection
& [DllImport("mpr.dll")]
& public static extern int
WNetAddConnection2A(NETRESOURCE[] lpNetResource, string lpPassword,
string lpUserName, int dwFlags);
& [DllImport("mpr.dll")]
& public static extern int
WNetCancelConnection2A(string sharename, int dwFlags, int
& public static int Connect(string remotePath,
string localPath, string username, string password)
NETRESOURCE[] share_driver = new NETRESOURCE[1];
share_driver[0].dwScope =
RESOURCE_SCOPE.RESOURCE_GLOBALNET;
share_driver[0].dwType =
RESOURCE_TYPE.RESOURCETYPE_DISK;
share_driver[0].dwDisplayType =
RESOURCE_DISPLAYTYPE.RESOURCEDISPLAYTYPE_SHARE;
share_driver[0].dwUsage =
RESOURCE_USAGE.RESOURCEUSAGE_CONNECTABLE;
share_driver[0].lpLocalName = localP
share_driver[0].lpRemoteName = remoteP
Disconnect(localPath);
& & & int ret =
WNetAddConnection2A(share_driver, password, username,
& & & return
& public static int Disconnect(string
localpath)
& & & return
WNetCancelConnection2A(localpath, 1, 1);
& public static string NWConnection()
& & & string
localpath = "N:";
& & & string
serverPath = @"\\192.168.1.102";
& & & string
loginUser = "user";//
& & & string
loginPassword = "password";//
& & & String
line = "";
& & & int status
= NetworkConnection.Connect(serverPath, localpath, loginUser,
loginPassword);
& & & if (status
== (int)ERROR_ID.ERROR_SUCCESS)
& & //连接成功
(File.Exists(localpath + @"\filename.txt"))
& & & using
(StreamReader sr = new StreamReader(localpath +
@"\filename.txt",
Encoding.Default))//有中文编码时注意选取正确编码方式
& & line =
sr.ReadToEnd();
NetworkConnection.Disconnect(localpath);&// 断开连接
& & & return
调用时使用NetworkConnection.NWConnection()方法即可,当然可以将修改NWConnection()方法,将需要的本地盘符、共享目录的账号密码等设置为参数。
​第二种方法代码:
&public class FileShare
& public FileShare() { }
& public static bool connectState(string
& & & return
connectState(path, "", "");
& public static bool connectState(string path,
string userName, string passWord)
& & & bool Flag
& & & Process
proc = new Process();
& & proc.StartInfo.FileName =
"cmd.exe";
proc.StartInfo.UseShellExecute =
proc.StartInfo.RedirectStandardInput =
proc.StartInfo.RedirectStandardOutput =
proc.StartInfo.RedirectStandardError =
& & proc.StartInfo.CreateNoWindow
& & proc.Start();
& & string dosLine = @"net use "
+ path + " /User:" + userName + " " + passWord + "
/PERSISTENT:YES";
proc.StandardInput.WriteLine(dosLine);
proc.StandardInput.WriteLine("exit");
(!proc.HasExited)
& proc.WaitForExit(1000);
& & string errormsg =
proc.StandardError.ReadToEnd();
proc.StandardError.Close();
(string.IsNullOrEmpty(errormsg))
& throw new Exception(errormsg);
& & & catch
(Exception ex)
& & proc.Close();
& & proc.Dispose();
& & & return
& //read file
& public static string
&ReadtxtFiles(string path)
& & // Create an instance of
StreamReader to read from a file.
& & // The using statement also
closes the StreamReader.
& & using (StreamReader sr = new
StreamReader(path,Encoding.Default ))
& String line=sr.ReadToEnd();
& & &return
& & & catch
(Exception e)
& & // Let the user know what
went wrong.
& & Console.WriteLine("The file
could not be read:");
Console.WriteLine(e.Message);
& & return "";
& //write file
& public static void WriteFiles(string
& & // Create an instance of
StreamWriter to write text to a file.
& & // The using statement also
closes the StreamWriter.
& & using (StreamWriter sw = new
StreamWriter(path))
& // Add some text to the file.
& sw.Write("This is the ");
& sw.WriteLine("header for the file.");
& sw.WriteLine("-------------------");
& // Arbitrary objects can also be written to the
& sw.Write("The date is: ");
& sw.WriteLine(DateTime.Now);
& & & catch
(Exception e)
& & // Let the user know what
went wrong.
& & Console.WriteLine("The file
could not be read:");
Console.WriteLine(e.Message);
​调用:& bool
//连接共享文件夹
& & & status =
FileShare.connectState(@"\\path", "user", "password");
& & DirectoryInfo theFolder = new
DirectoryInfo(@"\\path");
//先测试读文件,把目录路径与文件名连接
& & string filename =
theFolder.ToString() + "\\filename.txt";
& &FileShare.ReadtxtFiles(filename);
& & //测试写文件,拼出完整的路径
& & //filename =
theFolder.ToString() + "\\bad.txt";
//FileShare.WriteFiles(filename);
//遍历共享文件夹,把共享文件夹下的文件列表列到listbox
& & //foreach (FileInfo nextFile
in theFolder.GetFiles())
& & // &//
&ListBox1.Items.Add(nextFile.Name);
//ListBox1.Items.Add("未能连接!");
博客等级:
博客积分:0
博客访问:13,233
关注人气:0
荣誉徽章:如何设置网上邻居电脑共享和文件共享2_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
如何设置网上邻居电脑共享和文件共享2
上传于|0|0|文档简介
&&网络技术
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
局域网内如何实现文件共享
下载积分:966
内容提示:局域网内如何实现文件共享
文档格式:DOC|
浏览次数:10|
上传日期: 23:41:32|
文档星级:
该用户还上传了这些文档
局域网内如何实现文件共享
官方公共微信查看:36857|回复:12
服务器是server 2008 r2.
如何让其他电脑访问这台服务器共享文件的时候,每次都输入用户名和密码,
现在的情况是 其它电脑只需输一次,系统就保存,下次直接点击文件就去了,领导觉得这样不安全。
所以问问高手们有没好的办法来解决这个问题,或者是第3方软件。
高级工程师
引用:原帖由 风雨漂泊 于
11:57 发表
服务器是server 2008 r2.
如何让其他电脑访问这台服务器共享文件的时候,每次都输入用户名和密码,
现在的情况是 其它电脑只需输一次,系统就保存,下次直接点击文件就去了,领导觉得这样不安全。
所以问问高手们有没好的办法 ... 用户第一次认证是需要输入密码,重启后,还是需要输入密码才能访问
可以在WINDOWS用户密码管理工具里故意保存一个服务器的错误的密码。这样,每次重新登录访问共享文件都会问密码。
记得点“引用/回复” 我才能跟踪你的问题与反馈。
及时反馈也是对帮助你的人表示感谢的一种。
补充或更正我的回答,可以获得加分奖励哦!
组策略里面改下就可以了。
之前有改成这样的,可是上头说这样每次访问都要输入密码,太麻烦了,然后又取消了。
(138.55 KB)
本帖最后由 lonely2140 于
14:40 编辑
引用:原帖由 lonely2140 于
14:34 发表
组策略里面改下就可以了。
之前有改成这样的,可是上头说这样每次访问都要输入密码,太麻烦了,然后又取消了。 哥们,你这个操作是针对客户端的吧 ,集团很多电脑,这样做显然工作量太大了
引用:原帖由 hot_powerz 于
13:09 发表
可以在WINDOWS用户密码管理工具里故意保存一个服务器的错误的密码。这样,每次重新登录访问共享文件都会问密码。 保存一个错误的密码,这个得怎么做呢,
我是希望如果能在服务器端上完成这个操作来限制别人每次都要重新输入用户,密码来登陆共享文件。
本帖最后由 风雨漂泊 于
16:56 编辑
路過,瞧瞧!!!
初级工程师
引用:原帖由 风雨漂泊 于
16:51 发表
哥们,你这个操作是针对客户端的吧 ,集团很多电脑,这样做显然工作量太大了 那就域策略呗。但估计就会有很多投诉了!因为这并不是公司制度,而仅仅是个人喜好。
高级工程师
你们是域环境吗?怎么每次访问共享文件夹还需要手动输入密码,难道是公用的账户?如果当前用户账号有权限,那他打开共享文件夹自己就进去了不需要手动输入用户密码。那这种公共的账户做法本身就不安全,你要审计也不知道是谁谁谁干了什么?个人觉得应该在共享权限和NTFS上限制对应的用户组,然后你通过登陆脚本自动连接到用户需要的对应网络磁盘。
另外如果通过另外一个账户访问网络共享资源,我觉得你可以手动设置timeout的时间,时间设置短一点,那么时间一过,会话连接就断开了,你自然需要重新输入
各种类型的timeout可以参考
引用:原帖由 风雨漂泊 于
16:51 发表
哥们,你这个操作是针对客户端的吧 ,集团很多电脑,这样做显然工作量太大了 额,,
这是我的本机组策略没错。
懒得远程进服务器截图。
在域服务器上改了这个之后,每次其他域用户在主机重启之后要访问域服务器的资源都要重新输入自己的域用户和密码的。(你要的不就是这个?)
好像这个要求蛮难的。有一种方法,你可以设置定时用命令改用户的密码,这样,用户就算保存了密码,也无效。你可以设置每天改一次或多次。
当然,你可以约定密码的格式,如 password+月-日-时。
这种方法可以不用动客户端的设置,也不会影响用户保存其它服务器的密码。
记得点“引用/回复” 我才能跟踪你的问题与反馈。
及时反馈也是对帮助你的人表示感谢的一种。
补充或更正我的回答,可以获得加分奖励哦!
沉默是毁谤最好的答覆
这个可以有
“我好像喜欢上你了。” “怎么说的好像你上过我似的。”
如果是域环境,通过策略可以将共享文件夹映射到域内的每一台客户机上。在此之前,给用户分好组,再设置好文件夹的组权限就可以了。这比设置密码要安全的多。
本帖最后由 Solitudes 于
16:19 编辑

我要回帖

更多关于 共享文件夹无法访问 的文章

 

随机推荐