• webservice 访问 网络共享文件夹 权限问题的解决方案


     public enum ERROR_ID
        {
            ERROR_SUCCESS = 0,   //  Success
            ERROR_BUSY = 170,
            ERROR_MORE_DATA = 234,
            ERROR_NO_BROWSER_SERVERS_FOUND = 6118,
            ERROR_INVALID_LEVEL = 124,
            ERROR_ACCESS_DENIED = 5,
            ERROR_INVALID_PASSWORD = 86,
            ERROR_INVALID_PARAMETER = 87,
            ERROR_BAD_DEV_TYPE = 66,
            ERROR_NOT_ENOUGH_MEMORY = 8,
            ERROR_NETWORK_BUSY = 54,
            ERROR_BAD_NETPATH = 53,
            ERROR_NO_NETWORK = 1222,
            ERROR_INVALID_HANDLE_STATE = 1609,
            ERROR_EXTENDED_ERROR = 1208,
            ERROR_DEVICE_ALREADY_REMEMBERED = 1202,
            ERROR_NO_NET_OR_BAD_PATH = 1203
        }
    
        public enum RESOURCE_SCOPE
        {
            RESOURCE_CONNECTED = 1,
            RESOURCE_GLOBALNET = 2,
            RESOURCE_REMEMBERED = 3,
            RESOURCE_RECENT = 4,
            RESOURCE_CONTEXT = 5
        }
    
        public enum RESOURCE_TYPE
        {
            RESOURCETYPE_ANY = 0,
            RESOURCETYPE_DISK = 1,
            RESOURCETYPE_PRINT = 2,
            RESOURCETYPE_RESERVED = 8,
        }
    
        public enum RESOURCE_USAGE
        {
            RESOURCEUSAGE_CONNECTABLE = 1,
            RESOURCEUSAGE_CONTAINER = 2,
            RESOURCEUSAGE_NOLOCALDEVICE = 4,
            RESOURCEUSAGE_SIBLING = 8,
            RESOURCEUSAGE_ATTACHED = 16,
            RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
        }
    
        public enum RESOURCE_DISPLAYTYPE
        {
            RESOURCEDISPLAYTYPE_GENERIC = 0,
            RESOURCEDISPLAYTYPE_DOMAIN = 1,
            RESOURCEDISPLAYTYPE_SERVER = 2,
            RESOURCEDISPLAYTYPE_SHARE = 3,
            RESOURCEDISPLAYTYPE_FILE = 4,
            RESOURCEDISPLAYTYPE_GROUP = 5,
            RESOURCEDISPLAYTYPE_NETWORK = 6,
            RESOURCEDISPLAYTYPE_ROOT = 7,
            RESOURCEDISPLAYTYPE_SHAREADMIN = 8,
            RESOURCEDISPLAYTYPE_DIRECTORY = 9,
            RESOURCEDISPLAYTYPE_TREE = 10,
            RESOURCEDISPLAYTYPE_NDSCONTAINER = 11
        }
    
        [StructLayout(LayoutKind.Sequential)]
        public struct NETRESOURCE
        {
            public RESOURCE_SCOPE dwScope;
            public RESOURCE_TYPE dwType;
            public RESOURCE_DISPLAYTYPE dwDisplayType;
            public RESOURCE_USAGE dwUsage;
    
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpLocalName;
    
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpRemoteName;
    
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpComment;
    
            [MarshalAs(UnmanagedType.LPStr)]
            public string lpProvider;
        }
        public class NetworkConnection
        {
    
            [DllImport("mpr.dll")]
            public static extern int WNetAddConnection2A(NETRESOURCE[] lpNetResource, string lpPassword, string lpUserName, int dwFlags);
    
            [DllImport("mpr.dll")]
            public static extern int WNetCancelConnection2A(string sharename, int dwFlags, int fForce);
    
    
            public static int Connect(string remotePath, string localPath, string username, string password)
            {
                NETRESOURCE[] share_driver = new NETRESOURCE[1];
                share_driver[0].dwScope = RESOURCE_SCOPE.RESOURCE_GLOBALNET;
                share_driver[0].dwType = RESOURCE_TYPE.RESOURCETYPE_DISK;
                share_driver[0].dwDisplayType = RESOURCE_DISPLAYTYPE.RESOURCEDISPLAYTYPE_SHARE;
                share_driver[0].dwUsage = RESOURCE_USAGE.RESOURCEUSAGE_CONNECTABLE;
                share_driver[0].lpLocalName = localPath;
                share_driver[0].lpRemoteName = remotePath;
    
                Disconnect(localPath);
                int ret = WNetAddConnection2A(share_driver, password, username, 1);
    
                return ret;
            }
    
            public static int Disconnect(string localpath)
            {
                return WNetCancelConnection2A(localpath, 1, 1);
            }
        }
    

    例子:

     string localpath = "X:";
                //int status = NetworkConnection.Connect(@"\192.168.0.2	est", localpath, @"test", "test");
                int status = NetworkConnection.Connect("\\192.168.0.2\test", localpath, @"test", "test");
                if (status == (int)ERROR_ID.ERROR_SUCCESS)
                {
                    FileStream fs = new FileStream(localpath + @"\123.txt", FileMode.OpenOrCreate);
                    using (StreamWriter stream = new StreamWriter(fs))
                    {
                        stream.WriteLine("你好呀,成功了");
                        stream.Flush();
                        stream.Close();
                    }
                    fs.Close();
                }
                else
                {
                    Console.WriteLine(status);
                }
                NetworkConnection.Disconnect(localpath);
    
  • 相关阅读:
    Android build系统中常用“LOCAL_” 变量
    android android.mk中:= ?= +=之间的区别
    Python3接口自动化14 飞书报告及邮件提醒内容呈现
    ABAPALV工作记录随笔(1)
    密码常识测试
    JNI接口的实现
    如何通过CSS样式绘制三角形,0基础学前端项目案例开发之HMTL+CSS项目实战系列
    入行前端需要学习那些内容,前端入门学习指南,web前端学习路线
    想要成为一名软件开发人员?这个职业道路指南可以了解下
    HTML、CSS 和 JavaScript 基本前端语言学习指南
  • 原文地址:https://www.cnblogs.com/hicolin/p/14003375.html
Copyright © 2020-2023  润新知