ASP .NET Core 访问共享文件夹
ASP .NET Core 访问Windows共享目录
安装Neget包
Install-Package SharpCifs.Std
CodeSample
using SharpCifs.Smb;
using System.IO;
using System.Linq;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
//Windows文件共享目录
string shareUrl = @"\\Rainfate\1";
//这里使用的共享目录字符串模板:smb://10.50.140.4/temp/MG/
//smb:是固定的,后面接地址 文件夹目录一定要以“/”结尾不然获取会报错,文件不需要
//文件夹最后一定要加斜杠,文件不用加
shareUrl = shareUrl.Replace('\\', '/').TrimEnd('/') + "/";
//文件夹认证
NtlmPasswordAuthentication auth = null;
//auth = new NtlmPasswordAuthentication("UserName:Password");
//auth = new NtlmPasswordAuthentication(string.Empty, "UserName", "Password");
var smb = new SmbFile($"smb:{shareUrl}", auth: auth);
//判断是否可以正常访问
smb.Connect();
//获取所有共享目录的文件和文件夹
var list = smb.ListFiles();
//获取所有文件
var smbListFiles = list.Where(f => f.IsFile()).ToList();
//获取所有文件夹
var smbListFolders = list.Where(f => f.IsDirectory()).ToList();
//获取文件/文件夹名称。
var name = list.First().GetName();
//文件夹后面会自带一个斜杠,代表文件夹
System.Console.WriteLine("folder/");
System.Console.WriteLine("file.txt");
//获取文件流
Stream stream = smbListFiles.First().GetInputStream();
stream.Close();
}
}
}
通过用户名和密码访问共享文件夹
/// <summary>
/// 通过路径、用户名和密码访问共享文件夹
/// </summary>
/// <param name="path">路径</param>
/// <param name="user">用户名</param>
/// <param name="pwd">密码</param>
public void GetAccessControl(string path, string user, string pwd)
{
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.FileName = System.Environment.GetEnvironmentVariable("ComSpec");
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.Start();
p.StandardInput.WriteLine(@"Net Use {0} /del", path); //必须先删除,否则报错
p.StandardInput.WriteLine(@"Net Use {0} ""{1}"" /user:{2}", path, pwd, user);
p.StandardInput.WriteLine("exit"); //如果不加这句WaitForExit会卡住
p.WaitForExit();
p.Close();
}