C# 共享文件夹,遍历,下载,上传(\\ip\\files)

类库:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ShareFile
{
    class ShareLib
    {
        public static string Sharefile_Error = "";
        public static bool connectState(string path)
        {
            return connectState(path, "", "");
        }
        /// <summary>
        /// 连接远程共享文件夹
        /// </summary>
        /// <param name="path">远程共享文件夹的路径</param>
        /// <param name="userName">用户名</param>
        /// <param name="passWord">密码</param>
        public static bool connectState(string path, string userName, string passWord)
        {
            bool Flag = false;
            Process proc = new Process();
            try
            {
                proc.StartInfo.FileName = "cmd.exe";
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardInput = true;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.RedirectStandardError = true;
                proc.StartInfo.CreateNoWindow = true;
                proc.Start();
                string dosLine = "net use " + path + " " + passWord + " /user:" + userName;
                proc.StandardInput.WriteLine(dosLine);
                proc.StandardInput.WriteLine("exit");
                while (!proc.HasExited)
                {
                    proc.WaitForExit(1000);
                }
                string errormsg = proc.StandardError.ReadToEnd();
                proc.StandardError.Close();
                if (string.IsNullOrEmpty(errormsg))
                {
                    Flag = true;
                }
                else
                {
                    Sharefile_Error = errormsg;
                }
            }
            catch (Exception ex)
            {
                Sharefile_Error = ex.Message;
            }
            finally
            {
                proc.Close();
                proc.Dispose();
            }
            return Flag;
        }

        /// <summary>
        /// 从远程服务器下载文件到本地
        /// </summary>
        /// <param name="SourceFile">远程服务器路径(共享文件夹路径)</param>
        /// <param name="LocalFile">下载到本地后的文件路径</param>
        /// <param name="LocalFileName">下载到本地文件名称,包含扩展名:ABC.text</param>
        public static bool TransportRemoteToLocal(string SourceFile, string LocalFile, string LocalFileName)
        {
            bool rel = false;
            try
            {
                //远程服务器文件  此处假定远程服务器共享文件夹下确实包含本文件,否则程序报错
                FileStream inFileStream = new FileStream(SourceFile, FileMode.Open);
                if (!Directory.Exists(LocalFile))
                {
                    Directory.CreateDirectory(LocalFile);
                }
                //从远程服务器下载到本地的文件
                if (!LocalFile.EndsWith(@"\"))
                {
                    LocalFile = LocalFile + LocalFileName;
                }
                else
                {
                    LocalFile = LocalFile + "\\" + LocalFileName;
                }

                FileStream outFileStream = new FileStream(LocalFile + LocalFileName, FileMode.OpenOrCreate);
                byte[] buf = new byte[inFileStream.Length];
                int byteCount;
                while ((byteCount = inFileStream.Read(buf, 0, buf.Length)) > 0)
                {
                    outFileStream.Write(buf, 0, byteCount);
                }
                inFileStream.Flush();
                inFileStream.Close();
                outFileStream.Flush();
                outFileStream.Close();
                rel = true;
            }
            catch (Exception ex)
            {
                Sharefile_Error = ex.Message;
            }
            return rel;
        }

        /// <summary>
        /// 将本地文件上传到远程服务器共享目录
        /// </summary>
        /// <param name="SourceFile">本地文件的绝对路径,包含扩展名</param>
        /// <param name="RemoteFile">远程服务器共享文件路径,不包含文件扩展名</param>
        /// <param name="RemoteFileName">上传到远程服务器后的文件扩展名</param>
        public static bool TransportLocalToRemote(string SourceFile, string RemoteFile, string RemoteFileName)    //src
        {
            //string SourceFile, string LocalFile, string LocalFileName
            bool rel = false;
            try
            {
                FileStream inFileStream = new FileStream(SourceFile, FileMode.Open);    //此处假定本地文件存在,不然程序会报错   
                if (!Directory.Exists(RemoteFile))        //判断上传到的远程服务器路径是否存在
                {
                    Directory.CreateDirectory(RemoteFile);
                }
                //上传到远程服务器共享文件夹后文件的绝对路径
                if (!RemoteFile.EndsWith(@"\"))
                {
                    RemoteFile = RemoteFile + RemoteFileName;
                }
                else
                {
                    RemoteFile = RemoteFile + "\\" + RemoteFileName;
                }
                FileStream outFileStream = new FileStream(RemoteFile, FileMode.OpenOrCreate);
                byte[] buf = new byte[inFileStream.Length];
                int byteCount;
                while ((byteCount = inFileStream.Read(buf, 0, buf.Length)) > 0)
                {
                    outFileStream.Write(buf, 0, byteCount);
                }
                inFileStream.Flush();
                inFileStream.Close();
                outFileStream.Flush();
                outFileStream.Close();
                rel = true;
            }
            catch (Exception ex)
            {
                Sharefile_Error = ex.Message;
            }
            return rel;
        }
        /// <summary>
        /// 模糊搜索文件:远程与本地通用
        /// </summary>
        /// <param name="SourceFile">远程路径</param>
        /// <param name="kzm">所有文件: *  ;指定格式文件:.txt</param>
        public static List<Fileinfo_share> GetAllFiles(string SourceFile, string kzm)
        {
            List<Fileinfo_share> listFiles = new List<Fileinfo_share>();
            try
            {
                //根目录下的文件
                DirectoryInfo dir = new DirectoryInfo(SourceFile);
                foreach (var file in dir.GetFiles())
                {
                    if (kzm == "*")
                    {
                        Fileinfo_share fi = new Fileinfo_share();
                        fi.FullName = file.FullName;
                        fi.filename = file.Name;
                        listFiles.Add(fi);
                    }
                    else if (file.Extension == kzm)
                    {
                        Fileinfo_share fi = new Fileinfo_share();
                        fi.FullName = file.FullName;
                        fi.filename = file.Name;
                        listFiles.Add(fi);
                    }
                }
                //二级目录下的文件
                DirectoryInfo[] fileInfo = dir.GetDirectories();
                foreach (DirectoryInfo item in fileInfo)
                {
                    foreach (var file in item.GetFiles())
                    {
                        if (kzm == "*")
                        {
                            Fileinfo_share fi = new Fileinfo_share();
                            fi.FullName = file.FullName;
                            fi.filename = file.Name;
                            listFiles.Add(fi);
                        }
                        else if (file.Extension == kzm)
                        {
                            Fileinfo_share fi = new Fileinfo_share();
                            fi.FullName = file.FullName;
                            fi.filename = file.Name;
                            listFiles.Add(fi);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Sharefile_Error = ex.Message;
            }
            return listFiles;
        }
    }
    public class Fileinfo_share
    {
        public string FullName { get; set; }
        public string filename { get; set; }
    }
}

读取调用:

注意:无账号密码访问:调用 ShareLib.connectState(@"\\192.168.3.3\Test");

  //连接共享目录
            bool status = ShareLib.connectState(@"\\192.168.3.3\Test", "fan1", "fan");
            if (status)
            {
                //查找文件
                List<Fileinfo_share> files = ShareLib.GetAllFiles(@"\\192.168.3.3\Test", "*");
                foreach (Fileinfo_share item in files)
                {
                    //下载文件
                    bool rel = ShareLib.TransportRemoteToLocal(item.FullName, Application.StartupPath + "\\Temp\\", item.filename);    //实现将远程服务器文件写入到本地
                    if (rel)
                    {
                        MessageBox.Show("下载完毕:" + item.FullName);
                    }
                    else
                    {
                        MessageBox.Show("下载失败!" + ShareLib.Sharefile_Error);
                    }
                }
            }
            else
            {
                MessageBox.Show("未能连接!" + ShareLib.Sharefile_Error);
            }

上传调用:

 bool status = ShareLib.connectState(@"\\192.168.3.3\Test", "fan1", "fan");
            if (status)
            {
                //查找本地文件
                List<Fileinfo_share> files = ShareLib.GetAllFiles(Application.StartupPath + "\\Temp\\", "*");
                foreach (Fileinfo_share item in files)
                {
                    //上传
                    bool rel = ShareLib.TransportLocalToRemote(item.FullName, @"\\192.168.3.3\Test\", item.filename);    //实现将远程服务器文件写入到本地
                    if (rel)
                    {
                        MessageBox.Show("上传完毕:" + item.FullName);
                    }
                    else
                    {
                        MessageBox.Show("上传失败!" + ShareLib.Sharefile_Error);
                    }
                }
            }
            else
            {
                MessageBox.Show("未能连接!" + ShareLib.Sharefile_Error);
            }

改造:遍历指定目录内所有子级文件夹内文件

        private static List<Fileinfo_share> listFiles = new List<Fileinfo_share>();
        /// <summary>
        /// 模糊搜索文件:远程与本地通用
        /// </summary>
        /// <param name="SourceFile">远程路径</param>
        /// <param name="kzm">所有文件: *  ;指定格式文件:.txt</param>
        private static List<Fileinfo_share> _GetAllFiles(string SourceFile, string kzm)
        {
            try
            {
                DirectoryInfo dir = new DirectoryInfo(SourceFile);
                //根目录下的文件
                foreach (var file in dir.GetFiles())
                {
                    if (kzm == "*")
                    {
                        Fileinfo_share fi = new Fileinfo_share();
                        fi.FullName = file.FullName;
                        fi.filename = file.Name;
                        listFiles.Add(fi);
                    }
                    else if (file.Extension == kzm)
                    {
                        Fileinfo_share fi = new Fileinfo_share();
                        fi.FullName = file.FullName;
                        fi.filename = file.Name;
                        listFiles.Add(fi);
                    }
                }
                //子级目录下的文件
                DirectoryInfo[] fileInfo = dir.GetDirectories();
                foreach (DirectoryInfo item in fileInfo)
                {
                    //递归
                    _GetAllFiles(item.FullName, kzm);
                }
            }
            catch (Exception ex)
            {
                Sharefile_Error = ex.Message;
            }
            return listFiles;
        }

        public static List<Fileinfo_share> GetAllFiles(string SourceFile, string kzm)
        {
            //因为用的静态类,所以需要先清空在调用,否则多次调用文件就重复咯。
            listFiles.Clear();
            List<Fileinfo_share> Files = _GetAllFiles(SourceFile, kzm);
            return Files;
        }      






//调用  :
 List<Fileinfo_share> files = ShareLib.GetAllFiles(@"\\192.168.3.3\Test", "*");

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fanwenhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值