首页 > 编程语言 >【C#】共享文件夹

【C#】共享文件夹

时间:2024-11-18 17:41:45浏览次数:1  
标签:string C# 文件夹 服务器 共享 proc 远程

一、配置环境

(1)设置共享文件夹
1、在需要共享的文件夹上右键,选择"属性"。
2、切换到"共享"选项卡,点击"高级共享"。
3、勾选"共享此文件夹",设置共享名称,并根据需要设置用户权限。
4、点击"权限"按钮,可以详细设置用户的读取、写入权限(账户必须有密码)。
5、设置完成后,点击"确定"应用设置。


(2)访问共享文件夹
1、在局域网内的其他计算机上,打开"运行"(Win+R),输入"\\"和共享文件夹所在计算机的IP地址,如"\\192.168.1.100"。
2、找到共享文件夹,双击进入即可访问共享资源。

 

二、访问代码

来源:https://www.cnblogs.com/xielong/p/16228945.html

public static class UploadShareFileHelper
    {
        #region C#访问远程服务器共享目录下载文件到本地或本地上传到服务器
/// <summary>
        /// 连接远程共享文件夹
        /// </summary>
        /// <param name="path">远程共享文件夹的路径</param>
        /// <param name="username">用户名</param>
        /// <param name="password">密码</param>
        /// <returns></returns>
        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 \\IP_ADDRESS\PATH /User:username password /PERSISTENT:YES";
                string dosLine = @"net use " + path + " /user:" + username + " " + password + " /persistent:yes";
                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
                {
                    throw new Exception(errorMsg);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                proc.Close();
                proc.Dispose();
            }
            return flag;
        }

        /// <summary>
        /// 从远程服务器下载文件到本地
        /// </summary>
        /// <param name="src">下载到本地后文件路径,包含文件扩展名</param>
        /// <param name="dst">远程服务器路径(共享文件夹路径)</param>
        /// <param name="fileName">远程服务器(共享文件夹)中的文件名称,包含扩展名</param>
        public static void TransportRemoteToLocal(string src, string dst, string fileName)
        {
            if (!Directory.Exists(dst))
            {
                Directory.CreateDirectory(dst);
            }
            dst = dst + fileName;
            FileStream inFileStream = new FileStream(dst, FileMode.Open);
            FileStream outFileStream = new FileStream(src, 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();
        }

        /// <summary>
        /// 将本地文件上传到远程服务器共享目录
        /// </summary>
        /// <param name="src">本地文件的绝对路径,包含扩展名</param>
        /// <param name="dst">远程服务器共享文件路径,不包含文件扩展名</param>
        /// <param name="fileName">上传到远程服务器后的文件扩展名</param>
        public static void TransportLocalToRemote(string src, string dst, string fileName)
        {

            FileStream inFileStream = new FileStream(src, FileMode.Open);
            //判断上传的远程服务器路径是否存在
            if (!Directory.Exists(dst))
            {
                Directory.CreateDirectory(dst);
            }
            //上传到远程服务器共享文件夹后文件的绝对路径
            dst = dst + fileName;
            FileStream outFileStream = new FileStream(dst, 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();
        }


        /// <summary>
        /// 将本地文件上传到远程服务器共享目录(通过cmd命令方式)(发现存在权限问题)
        /// </summary>
        /// <param name="srcBytes">本地文件的文件流数组</param>
        /// <param name="targetPath">远程服务器共享文件路径目录名</param>
        /// <param name="targetName">远程服务器共享文件路径名称名</param>
        public static bool UploadLocalToRemote(byte[] srcBytes, string targetPath, string targetName)
        {
            bool result = false;
            try
            {
                //判断上传的远程服务器路径是否存在
                if (!Directory.Exists(targetPath))
                {
                    Directory.CreateDirectory(targetPath);
                }
                //上传到远程服务器共享文件夹后文件的绝对路径
                string savePath = targetPath + "\\" + targetName;
                //写入文件流到文件中
                FileStream fs = new FileStream(savePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None, srcBytes.Length, false);
                fs.Write(srcBytes, 0, srcBytes.Length);
                fs.Flush();
                fs.Close();

                result = true;
            }
            catch (Exception ex)
            {
                result = false;
            }
            return result;
        }
   
        #endregion
       
    }

 

调用:

/// <summary>
        /// 测试上传和下载(访问远程服务器的共享目录)
        /// </summary>
        public static void TestUpload()
        {
            bool status = false;

            status = ConnectState(@"\\192.168.3.204\ShareFiles", "administrator", "abc@123");
            if (status)
            {
                DirectoryInfo theFolder = new DirectoryInfo(@"\\192.168.3.204\ShareFiles\");
                string filename = theFolder.ToString();
                //执行方法,方法一:读写时会有访问共享目录权限问题
                //实现将本地文件写入到远程服务器
                TransportLocalToRemote(@"D:\readme.txt", filename, "readme1.txt");
                //实现将远程服务器文件写入本地
                TransportRemoteToLocal(@"C:\serverMe1.txt", filename, "serverMe.txt");
            }
            else
            {
                Console.WriteLine("未能连接!");
            }
            Console.WriteLine("成功");
        }

 

标签:string,C#,文件夹,服务器,共享,proc,远程
From: https://www.cnblogs.com/Mars-0603/p/18553273

相关文章

  • Windows 右键新建文件添加指定后缀-bat批处理-c文件
    前言全局说明一、说明环境:Windows7旗舰版二、添加,创建.bat后缀文件在命令行里执行下面两条命令regaddHKCR\.bat\ShellNew/vnullfile/f>nulregaddHKCR\batfile/ve/dBAT批处理文件/f>nul三、添加,创建.c后缀文件regaddHKCR\.c\ShellNew/vnu......
  • 免费Office Tool Plus使用教程
    1.下载OfficeToolPlushttps://otp.landian.vip/zh-cn/2.安装3.激活输入命令:ospp/insLicIDMondoVolume/sethst:kms.loli.beer/setprt:1688/act可以免费的使用office了......
  • canvas实现抠图,画笔,水印等功能
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><title>Document</title&g......
  • 写一个Chrome浏览器插件
    作者:京东工业焦丁一、什么是浏览器插件浏览器插件是依附于浏览器,用来拓展网页能力的程序。插件具有监听浏览器事件、获取和修改网页元素、拦截网络请求、添加快捷菜单等功能。使用浏览器插件可以实现很多有趣的功能。  二、浏览器插件有哪些种类•以chromium为内核的浏......
  • 3张大图剖析HttpClient和IHttpClientFactory在解决DNS解析问题上的殊途同归
    在开发者便利度角度,我们很轻松地使用HttpClient对象发出HTTP请求,只需要关注应用层协议的BaseAddr、Url、ReqHeader、timeout。实际在HttpClient在源码级别是由HttpMessageHandler实例发出的请求。1.早期.NETHttpClient遇到的Socket滥用/DNS解析问题早期.NET的HttpClient使......
  • c语言文件大概
    文件一:文件的打开FILL*fp;fp=fopen("文件地址","打开方式“)打开方式:文件地址的方式有相对路径和绝对路径,具体不多说二:文件的关闭fclose(fp)三:文件读写函数1读写字符函数fgetc和fputc:fgetc("fp"),fputc("character","fp")fgetc就是从文件中读入一个字符,fputc是将一个字符......
  • Codeforces Round 988 (Div. 3) E题解析
    E题题目链接CodeforcesRound988(Div.3)题目描述题目的思路根据题目的意思,我们可以推断出算法时间复杂度应该在O(N)对于这道题而言,我们可以分析下思路首先我们先从1~n的范围里面询问答案如果出现0就跳过,因为无序操作如果出现非0答案temp就记录下1~i的01序列的个数如果......
  • Numercial result of IHDFP
    ......
  • centos7安装mysql8
    1、更新:sudoyumupdate2、添加MySQLYum存储库:sudorpm-Uvhhttps://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm3、安装MySQL:  sudoyuminstallmysql-server若安装过程中会报错: Failingpackageis:mysql-community-client-8.0.39-1.el7.x86_......
  • AIGC----生成对抗网络(GAN)如何推动AIGC的发展
    AIGC:生成对抗网络(GAN)如何推动AIGC的发展前言随着人工智能领域的迅猛发展,AI生成内容(AIGC,AIGeneratedContent)正成为创意产业和技术领域的重要组成部分。在AIGC的核心技术中,生成对抗网络(GAN,GenerativeAdversarialNetwork)被认为是推动AIGC发展的关键力量之一。本篇博......