System.IO
命名空间下的
FileStream
类,结合网络路径和必要权限实现。
在C#中打开网络共享资源通常可以通过以下几种方式实现:
使用System.IO
命名空间下的相关类
1、通过文件路径直接访问
如果知道网络共享资源的UNC路径(例如\服务器名称共享文件夹名称文件名
),可以直接在代码中使用该路径来访问文件。
示例代码如下:
using System; using System.IO; class Program { static void Main() { string filePath = @"\服务器名称共享文件夹名称文件名.txt"; if (File.Exists(filePath)) { // 执行相关操作,如读取文件内容等 Console.WriteLine("文件存在!"); } else { Console.WriteLine("文件不存在!"); } } }
上述代码首先定义了网络共享资源的UNC路径,然后使用File.Exists
方法检查文件是否存在,如果文件存在,则可以继续进行后续的操作,如读取文件内容等;如果文件不存在,则输出相应的提示信息。
2、使用DirectoryInfo
和FileInfo
类
可以使用DirectoryInfo
类来获取网络共享资源的目录信息,使用FileInfo
类来获取文件信息。
示例代码如下:
using System; using System.IO; class Program { static void Main() { string directoryPath = @"\服务器名称共享文件夹名称"; DirectoryInfo directoryInfo = new DirectoryInfo(directoryPath); if (directoryInfo.Exists) { // 获取目录下的所有文件和子目录 FileInfo[] files = directoryInfo.GetFiles(); foreach (FileInfo file in files) { Console.WriteLine(file.Name); } } else { Console.WriteLine("目录不存在!"); } } }
上述代码首先创建了一个DirectoryInfo
对象,表示网络共享资源的目录,然后使用Exists
方法检查目录是否存在,如果目录存在,则使用GetFiles
方法获取目录下的所有文件,并遍历输出文件名;如果目录不存在,则输出相应的提示信息。
使用System.Net
命名空间下的WebClient
类(适用于HTTP共享资源)
1、下载文件
如果网络共享资源是通过HTTP协议共享的,可以使用WebClient
类来下载文件。
示例代码如下:
using System; using System.Net; class Program { static void Main() { string url = "http://服务器地址/共享文件夹名称/文件名.txt"; using (WebClient webClient = new WebClient()) { try { webClient.DownloadFile(url, "本地保存路径\文件名.txt"); Console.WriteLine("文件下载成功!"); } catch (Exception ex) { Console.WriteLine("下载失败:" + ex.Message); } } } }
上述代码首先定义了HTTP共享资源的URL地址,然后创建一个WebClient
对象,使用DownloadFile
方法将文件下载到本地指定的路径,如果在下载过程中出现异常,则捕获异常并输出错误信息。
2、上传文件
同样可以使用WebClient
类来上传文件到HTTP共享资源。
示例代码如下:
using System.Net; class Program { static void Main() { string url = "http://服务器地址/共享文件夹名称/"; string filePath = "本地文件路径\文件名.txt"; using (WebClient webClient = new WebClient()) { try { webClient.UploadFile(url, "POST", filePath); Console.WriteLine("文件上传成功!"); } catch (Exception ex) { Console.WriteLine("上传失败:" + ex.Message); } } } }
上述代码首先定义了HTTP共享资源的URL地址和要上传的本地文件路径,然后创建一个WebClient
对象,使用UploadFile
方法将本地文件上传到服务器指定的路径,如果在上传过程中出现异常,则捕获异常并输出错误信息。
1、连接到SMB共享资源
SharpSMB是一个用于与SMB(Server Message Block)协议交互的C#库,可以用来连接和管理网络共享资源。
首先需要在项目中安装SharpSMB库,可以使用NuGet包管理器进行安装,安装命令如下:
Install-Package SharpSMBLib
安装完成后,可以使用以下代码连接到SMB共享资源:
using System; using SharpSMB.Client; using SharpSMB.Common; class Program { static void Main() { string serverName = "服务器名称"; string shareName = "共享文件夹名称"; string userName = "用户名"; string password = "密码"; string domain = "域名"; SmbOptions options = new SmbOptions() { Domain = domain, Password = password, UserName = userName, UseKerberos = false, // 根据实际需求设置是否使用Kerberos身份验证 UseNtlm = true // 使用NTLM身份验证 }; using (var connection = new SmbConnection(serverName, shareName, options)) { if (connection.Connect()) { Console.WriteLine("连接成功!"); // 在这里可以进行文件和目录的操作,如列出目录中的文件等 var files = connection.ListFiles(); foreach (var file in files) { Console.WriteLine(file.Name); } } else { Console.WriteLine("连接失败!"); } } } }
上述代码首先定义了服务器名称、共享文件夹名称、用户名、密码和域名等信息,并设置了SMB选项,包括身份验证方式等,然后创建了一个SmbConnection
对象,并尝试连接到SMB共享资源,如果连接成功,则输出“连接成功!”的信息,并可以继续进行文件和目录的操作,如列出目录中的文件等;如果连接失败,则输出“连接失败!”的信息。
2、操作文件和目录
连接成功后,可以使用SmbConnection
对象提供的方法来操作文件和目录,如上传、下载、删除、创建等,上传一个文件到SMB共享资源的代码如下:
using System; using SharpSMB.Client; using SharpSMB.Common; using System.IO; class Program { static void Main() { string serverName = "服务器名称"; string shareName = "共享文件夹名称"; string userName = "用户名"; string password = "密码"; string domain = "域名"; SmbOptions options = new SmbOptions() { Domain = domain, Password = password, UserName = userName, UseKerberos = false, // 根据实际需求设置是否使用Kerberos身份验证 UseNtlm = true // 使用NTLM身份验证 }; using (var connection = new SmbConnection(serverName, shareName, options)) { if (connection.Connect()) { Console.WriteLine("连接成功!"); string localFilePath = "本地文件路径\文件名.txt"; string remoteFilePath = "远程文件路径\文件名.txt"; // 远程文件路径可以是相对于共享文件夹的路径,也可以是完整的UNC路径 using (var fileStream = new FileStream(localFilePath, FileMode.Open, FileAccess.Read)) { connection.UploadFile(remoteFilePath, fileStream); Console.WriteLine("文件上传成功!"); } } else { Console.WriteLine("连接失败!"); } } } }
上述代码首先连接到SMB共享资源,然后打开本地要上传的文件,并将其上传到远程指定的位置,如果在上传过程中出现异常,则需要进行相应的异常处理。
3、注意事项
在使用SharpSMB或其他第三方库时,需要确保目标服务器支持相应的协议和端口,并且已经正确配置了网络共享资源,要注意安全性问题,避免敏感信息泄露,不要在代码中硬编码用户名和密码,可以考虑使用加密存储或环境变量等方式来获取这些信息,不同的网络环境和操作系统可能会对SMB连接有不同的要求和限制,需要根据实际情况进行调整和测试。