VB .Net 中的文件处理的共享方法和实例方法

VB .Net 中的文件处理的共享方法和实例方法,第1张

Directory和File提供的方法都是

内部早拍燃都是先打开文件句柄, *** 作文件。如Read Write。然后再关闭文件句柄。

如果你对一个文件 *** 作多次,就会多次打开和关闭。

DirectoryInfo和FileInfo是在new的时候,就是创陆虚建对象时,打开贺差文件句柄。

然后可以多次调用地象的方法执行 *** 作。

最后不用时,再释放对象,这时才会关闭文件句柄。

我不会VB,但是都是.net。c#的代码稍微携迟轮转换一下就可以了。

C#实现访问网络共享文件夹,使用 WNetAddConnection2A 和 WNetCancelConnection2A。

在目标服务器建立共享文件夹,建立访问账号test

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)

        }

 调用方式:

public static void TestNetWorkConnection()

        {

            string localpath = "X:"

            //int status = NetworkConnection.Connect(@"\\192.168.0.2\test", 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)

        }


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/12117448.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存