C#中访问网盘的方法

业务背景:

      有时需要在用c#写的web服务或winform中访问网络盘上面的文件,需要用c#代码手动创建网盘。

方法:

   用win api来实现连接网络盘,如果是在iis下面的web服务所连接的网盘,读写权限在iis下面有权访问,并且在windows下面

是不可见的。如果是在win下面所创建的在iis下面是没有权限访问题,下面就是原码。

1  先创建一个网盘的类文件WNetHelper


using System.Runtime.InteropServices;
using System.IO;
using System;
public class WNetHelper
{
    [DllImport("mpr.dll", EntryPoint = "WNetAddConnection2")]
    private static extern uint WNetAddConnection2(NetResource lpNetResource, string lpPassword, string lpUsername, uint dwFlags);
    [DllImport("Mpr.dll", EntryPoint = "WNetCancelConnection2")]
    private static extern uint WNetCancelConnection2(string lpName, uint dwFlags, bool fForce);
    [StructLayout(LayoutKind.Sequential)]
    public class NetResource
    {
        public int dwScope;
        public int dwType;
        public int dwDisplayType;
        public int dwUsage;
        public string lpLocalName;
        public string lpRemoteName;
        public string lpComment;
        public string lpProvider;
    }
    /// <summary>
    /// 为网络共享做本地映射
    /// </summary>
    /// <param name="username">访问用户名(windows系统需要加计算机名,如:comp-1/user-1)</param>
    /// <param name="password">访问用户密码</param>
    /// <param name="remoteName">网络共享路径(如://192.168.0.9/share)</param>
    /// <param name="localName">本地映射盘符</param>
    /// <returns></returns>
    public static uint WNetAddConnection(string username, string password, string remoteName, string localName)
    {
        NetResource netResource = new NetResource();
        netResource.dwScope = 2;
        netResource.dwType = 1;
        netResource.dwDisplayType = 3;
        netResource.dwUsage = 1;
        netResource.lpLocalName = localName;
        netResource.lpRemoteName = remoteName.TrimEnd('/');
        uint result = WNetAddConnection2(netResource, password, username, 0);
        return result;
    }

    public static uint WNetCancelConnection(string name, uint flags, bool force)
    {
        uint nret = WNetCancelConnection2(name, flags, force);
        return nret;
    }
}

2 调用创建网盘示例

 string picturePath1 = "";
 string picturePath2 = "";
 string NetRoot = "";
 string NetPath = "";
 string NetUser = "";
 string NetPSW = "";
  uint state = 0;
  NetRoot = ConfigurationManager.ConnectionStrings["NetRoot"].ConnectionString;
        NetPath = ConfigurationManager.ConnectionStrings["NetPath"].ConnectionString;
        NetUser = ConfigurationManager.ConnectionStrings["NetUser"].ConnectionString;
        NetPSW = ConfigurationManager.ConnectionStrings["NetPSD"].ConnectionString;
        picturePath1 = ConfigurationManager.ConnectionStrings["PicturePath1"].ConnectionString;
        picturePath2 = ConfigurationManager.ConnectionStrings["PicturePath2"].ConnectionString;

        if (!Directory.Exists(NetRoot))
        {

            //WNetHelper.WNetAddConnection(@"计算机名称\登录账户", "登录密码", @"映射路径", @"映射盘符名称"); 
         
            state = WNetHelper.WNetAddConnection(NetUser, NetPSW, NetPath, NetRoot);
        }
        if (state.Equals(0))
        {
        }
        else
        {
            Console.WriteLine("添加网络驱动器错误,错误号:" + state.ToString());


        }

3 网盘建好后,就同本地盘一样的方法进行访问了。测试函数:

public string A_TEST_A(string file)
    {
        string filepath = picturePath1 + file + ".jpg";
        if (File.Exists(filepath))
        {
            return filepath+"文件存在";
        }
        else
        {
            filepath = picturePath2 + file + ".jpg";
            if (File.Exists(filepath))
            {
                return filepath + "文件存在";
            }
            else
               return filepath+"文件不存在";
        }
    }

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值