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();
        }
posted @ 2022-11-07 20:57  雨水的命运  阅读(1428)  评论(0编辑  收藏  举报