1、SharpCifs的安装引用
使用Nuget管理工具搜索"SharpCifs"=>找到选择 "安装"
相关文档:VS(Visual Studio)中Nuget的使用
代码地址:https://github.com/zinkpad/SharpCifs
2、获取共享目录中路径和文件的方法
//using System;//using SharpCifs.Smb;//获取文件夹的SmbFile-Objectvar folder = new SmbFile("smb://UserName:Password@ServerIP/ShareName/FolderName/");//UnixTimevar epocDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);//列出 itemsforeach (SmbFile item in folder.ListFiles()){ var lastModDate = epocDate.AddMilliseconds(item.LastModified()) .ToLocalTime(); var name = item.GetName(); var type = item.IsDirectory() ? "dir" : "file"; var date = lastModDate.ToString("yyyy-MM-dd HH:mm:ss"); var msg = $"{name} ({type}) - LastMod: {date}"; Console.WriteLine(msg);}
3、连接共享目录和验证帐户密码
//using System;//using SharpCifs.Smb;//设置本地udp广播端口。//连接时使用主机名,//将默认本地端口(137)更改为大于1024的值。//在许多情况下,使用这个著名的港口是受到限制的。//// **如果可能,使用IP地址而不是主机名// **获得更好的性能。//SharpCifs.Config.SetProperty("jcifs.smb.client.lport", "8137");//string to Auth-Object.var auth1 = new NtlmPasswordAuthentication("UserName:Password");var smb1 = new SmbFile("smb://192.168.0.1/ShareName/FolderName/", auth1);Console.WriteLine($"exists? {smb1.Exists()}");//3 string to Auth-Object.var auth2 = new NtlmPasswordAuthentication(null, "UserName", "Password");var smb2 = new SmbFile("smb://HostName/ShareName/FolderName/", auth2);Console.WriteLine($"exists? {smb2.Exists()}");//插入用户密码到URL中.var smb3 = new SmbFile("smb://UserName:Password@HostName/ShareName/FolderName/");Console.WriteLine($"exists? {smb3.Exists()}");//您可以将身份验证信息存储在SharpCifs.Std中。SharpCifs.Config.SetProperty("jcifs.smb.client.username", "UserName");SharpCifs.Config.SetProperty("jcifs.smb.client.password", "Password");var smb4 = new SmbFile("smb://HostName/ShareName/FolderName/");Console.WriteLine($"exists? {smb4.Exists()}");
4、从共享目录中读取文件
//using System;//using System.IO;//using System.Text;//using SharpCifs.Smb;//获取目录的SmbFile.var file = new SmbFile("smb://UserName:Password@ServerIP/ShareName/Folder/FileName.txt");//获取可读的流。var readStream = file.GetInputStream();//创建读取缓存var memStream = new MemoryStream();//获取 bytes.((Stream)readStream).CopyTo(memStream);//Dispose可读的流。readStream.Dispose();Console.WriteLine(Encoding.UTF8.GetString(memStream.ToArray()));
5、在共享目录中创建新文件
//using System.Text;//using SharpCifs.Smb;//获取指定要创建的文件名的SmbFile。var file = new SmbFile("smb://UserName:Password@ServerIP/ShareName/Folder/NewFileName.txt");//创建文件file.CreateNewFile();//获取可写的stream.var writeStream = file.GetOutputStream();//写入 bytes内容.writeStream.Write(Encoding.UTF8.GetBytes("Hello!"));//Dispose 可写的 stream.writeStream.Dispose();
6、浏览在局域网中的共享服务
//using System;//using SharpCifs.Smb;//设置本地udp广播端口。//连接时使用主机名,//将默认本地端口(137)更改为大于1024的值。//在许多情况下,使用这个著名的港口是受到限制的。//// **如果可能,使用IP地址而不是主机名// **获得更好的性能。//SharpCifs.Config.SetProperty("jcifs.smb.client.lport", "8137");//得到本地的工作组var lan = new SmbFile("smb://", "");var workgroups = lan.ListFiles();foreach (var workgroup in workgroups){ Console.WriteLine($"Workgroup Name = {workgroup.GetName()}"); try { //Get servers in workgroup. var servers = workgroup.ListFiles(); foreach (var server in servers) { Console.WriteLine($"{workgroup.GetName()} - Server Name = {server.GetName()}"); try { //Get shared folders in server. var shares = server.ListFiles(); foreach (var share in shares) { Console.WriteLine($"{workgroup.GetName()}{server.GetName()} - Share Name = {share.GetName()}"); } } catch (Exception) { Console.WriteLine($"{workgroup.GetName()}{server.GetName()} - Access Denied"); } } } catch (Exception) { Console.WriteLine($"{workgroup.GetName()} - Access Denied"); }}
7、主机名称解析
//using System;//using System.Net;//using SharpCifs.Netbios;//设置本地udp广播端口。//连接时使用主机名,//将默认本地端口(137)更改为大于1024的值。//在许多情况下,使用这个著名的港口是受到限制的。//// **如果可能,使用IP地址而不是主机名// **获得更好的性能。//SharpCifs.Config.SetProperty("jcifs.smb.client.lport", "8137");var naddr = NbtAddress.GetByName("HostName");IPAddress addr = naddr.GetInetAddress();Console.WriteLine($"IP = {addr}");
8、设置共享参数
//设置本地IP地址。//如果发生连接错误(例如:连接失败:[NET BIOS NAME]),//尝试设置本地IP地址。//当设备的主机名作为DNS名称无效时,//要确定当地的地址可能是不可能的。SharpCifs.Config.SetProperty("jcifs.smb.client.laddr", "192.168.0.2");//设置本地udp广播端口。//连接时使用主机名,//将默认本地端口(137)更改为大于1024的值。//在许多情况下,使用这个著名的港口是受到限制的。//// **如果可能,使用IP地址而不是主机名// **获得更好的性能。//SharpCifs.Config.SetProperty("jcifs.smb.client.lport", "8137");//您可以将身份验证信息存储在SharpCifs.Std中。SharpCifs.Config.SetProperty("jcifs.smb.client.username", "UserName");SharpCifs.Config.SetProperty("jcifs.smb.client.password", "Password");//如果您不使用DFS(分布式文件系统),//禁用DFS可以提高NetBios名称解析的速度。SharpCifs.Config.SetProperty("jcifs.smb.client.dfs.disabled", "true");//更多的配置参数在JCIFS官方站点中。//https://jcifs.samba.org/src/docs/api/overview-summary.html
9、刷新设置和连接缓存
//----------------------------------------//必选:版本0.2.9或更高。//----------------------------------------////强制应用设置值。//在默认操作上,应用第一次smb处理时的设置值,并且不能更改。//该方法强制应用SMB处理后更改的设置值。////并且,这个方法处理当前无效的缓存连接。//例如,在连接后30分钟内不能工作的连接将被处理。SmbFile.Initialize();//重置无效的连接。//使用此方法处理无效连接,而无需操作设置值。SmbTransport.ClearCachedConnections();//重置所有(包括活动)连接。//使用此方法处理所有连接,包括当前连接。//注意,即使在数据传输期间,它也会处理连接。SmbTransport.ClearCachedConnections(true);