C#访问网络共享文件夹的方法

C#访问网络共享文件夹的方法有以下两种:

  1. 使用.NET框架提供的System.IO命名空间和File类
  2. 使用WNetAddConnection2函数和WNetCancelConnection2函数

方法一:使用System.IO命名空间和File类

在C#中,我们可以使用System.IO命名空间中的File类来访问网络共享文件夹。具体步骤如下:

  1. 在代码中引入System.IO命名空间.
using System.IO;
  1. 使用File的静态方法来打开文件
FileStream fileStream = File.Open(@"\\servername\sharedfolder\file.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

需要注意的是,在文件路径中要指定网络共享文件夹的地址,格式为\servername\sharedfolder\filename。

代码示例:

using System.IO;

namespace AccessNetworkSharedFolder
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                FileStream fileStream = File.Open(@"\\servername\sharedfolder\file.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
                StreamReader reader = new StreamReader(fileStream);
                Console.WriteLine(reader.ReadLine());
                reader.Close();
                fileStream.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception : " + ex.Message);
            }
        }
    }
}

方法二:使用WNetAddConnection2和WNetCancelConnection2函数

另外一种访问网络共享文件夹的方法是使用WNetAddConnection2函数和WNetCancelConnection2函数。WNetAddConnection2函数可以将远程共享资源连接到本地驱动器号(例如,将远程共享文件夹映射到本地的一个驱动器号,如 Z:)。WNetCancelConnection2函数用于取消远程共享资源的连接。

具体步骤如下:

  1. 在代码中引入System.Runtime.InteropServices命名空间。
using System.Runtime.InteropServices;
  1. 声明WNetAddConnection2函数和WNetCancelConnection2方法。
[DllImport("mpr.dll")]
private static extern int WNetAddConnection2A(ref NETRESOURCE lpNetResource, string lpPassword, string lpUsername, int dwFlags);

[DllImport("mpr.dll")]
public static extern int WNetCancelConnection2A(string lpName, int dwFlags, bool fForce);
  1. 创建NETRESOURCE对象。
[StructLayout(LayoutKind.Sequential)]
public struct 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;
}
  1. 调用WNetAddConnection2函数来连接共享资源并获取本地驱动器号。
NETRESOURCE nr = new NETRESOURCE();
nr.dwType = RESOURCETYPE_DISK;
nr.lpRemoteName = @"\\servername\sharedfolder";
int result = WNetAddConnection2A(ref nr, "password", "username", 0);

if (result == 0)
{
    Console.WriteLine("Connection established");
    string sharedFolder = @"Z:\folder\file.txt";
    StreamReader reader = new StreamReader(sharedFolder);
    Console.WriteLine(reader.ReadLine());
    reader.Close();
}
else
{
    Console.WriteLine("Connection failed");
}
  1. 使用完毕后,使用WNetCancelConnection2函数来取消连接。
int result = WNetCancelConnection2A(@"Z:", 0, true);

if (result == 0)
{
    Console.WriteLine("Connection terminated successfully");
}
else
{
    Console.WriteLine("Connection termination failed");
}

完整代码示例:

using System;
using System.IO;
using System.Runtime.InteropServices;

namespace AccessNetworkSharedFolder
{
    class Program
    {
        [StructLayout(LayoutKind.Sequential)]
        public struct 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;
        }

        [DllImport("mpr.dll")]
        private static extern int WNetAddConnection2A(ref NETRESOURCE lpNetResource, string lpPassword, string lpUsername, int dwFlags);

        [DllImport("mpr.dll")]
        public static extern int WNetCancelConnection2A(string lpName, int dwFlags, bool fForce);

        private const int RESOURCETYPE_DISK = 1;

        static void Main(string[] args)
        {
            NETRESOURCE nr = new NETRESOURCE();
            nr.dwType = RESOURCETYPE_DISK;
            nr.lpRemoteName = @"\\servername\sharedfolder";
            int result = WNetAddConnection2A(ref nr, "password", "username", 0);

            if (result == 0)
            {
                Console.WriteLine("Connection established");
                string sharedFolder = @"Z:\folder\file.txt";
                StreamReader reader = new StreamReader(sharedFolder);
                Console.WriteLine(reader.ReadLine());
                reader.Close();
            }
            else
            {
                Console.WriteLine("Connection failed");
            }

            int disconnectResult = WNetCancelConnection2A(@"Z:", 0, true);

            if (disconnectResult == 0)
            {
                Console.WriteLine("Connection terminated successfully");
            }
            else
            {
                Console.WriteLine("Connection termination failed");
            }
        }
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#访问网络共享文件夹的方法 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • 解析ASP.NET Core中Options模式的使用及其源码

    解析ASP.NET Core中Options模式的使用及其源码攻略 ASP.NET Core中Options模式是一种用于配置应用程序的机制。在本攻略中,我们将深入讨Options模式的使用及其源码,并提供两个示例说明。 Options模式的使用 在ASP.NET Core中,Options模式是一种用于配置应用程序的机制。Options模式允许您将配置数据…

    C# 2023年5月17日
    00
  • C#修改MAC地址类的实例

    首先我们需要明确一下”C#修改MAC地址类的实例”到底指什么。MAC地址是指网络适配器(网卡)上的物理地址,每张网卡都有唯一的MAC地址,它的作用是在局域网中进行唯一标识和寻址。而”C#修改MAC地址类的实例”指的是通过C#编程语言编写一个可以修改MAC地址的类,并实例化这个类,这样我们就可以在程序中使用这个类来修改MAC地址。 下面是具体的攻略: 1. 了…

    C# 2023年6月7日
    00
  • ASP.NET使用HttpWebRequest读取远程网页源代码

    下面是ASP.NET使用HttpWebRequest读取远程网页源代码的完整攻略。 一、介绍HttpWebRequest HttpWebRequest 是 .NET Framework 内置的一个用于创建 HTTP 请求的类,它提供了许多属性和方法来设置 HTTP 请求的参数和参数值,以及获取 HTTP 响应信息。使用 HttpWebRequest 可以方便…

    C# 2023年5月31日
    00
  • win11系统出现Windows Live照片库加载photoviewer.dll错误修复教程

    说明:下文中代码块中的命令适用于Windows 11系统。 Windows Live照片库加载photoviewer.dll错误修复教程 如果在使用Windows Live照片库的过程中,遇到加载photoviewer.dll错误的情况,可能会导致无法使用该功能。这个问题的出现原因可能是由于系统文件的损坏、驱动程序错误等多种原因。以下是修复这个问题的步骤。 …

    C# 2023年6月6日
    00
  • MASA MinimalAPI源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口

    源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口 1.ServiceBase 1.AutoMapRoute 源码如下: AutoMapRoute自动创建map路由,MinimalAPI会根据service中的方法,创建对应的api接口。 比如上文的一个方法: public async Task<WeatherForecast[]&g…

    C# 2023年5月9日
    00
  • C# 实例化接口对象的方法

    C#中实例化接口对象的方法有两种:使用类实现接口和使用匿名类型实现接口。 使用类实现接口 定义一个接口 public interface IExampleInterface { void ExampleMethod1(); void ExampleMethod2(string exampleArg); } 创建实现该接口的类 public class Exa…

    C# 2023年6月1日
    00
  • C#的加密与解密

    C#的加密与解密 C#提供了多种加密与解密方式,常见的有对称加密、非对称加密和哈希算法。 对称加密 对称加密即使用相同的密钥进行加密和解密。常见的对称加密算法有DES、AES等。 示例代码: using System.Security.Cryptography; using System.Text; public static string Encrypt(…

    C# 2023年6月1日
    00
  • C#中的Task.WaitAll和Task.WaitAny方法介绍

    C#中的Task.WaitAll和Task.WaitAny方法介绍 简介 在C#的异步编程过程中,我们经常需要处理多个任务并发执行的情况。.NET Framework提供了Task.Parallel类来支持一种简单的并行处理方式。在实际编程中,我们通常会使用Task.WaitAll和Task.WaitAny两个方法对任务的执行进行控制。 Task.WaitA…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部