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日

相关文章

  • Java中前台往后台传递多个id参数的实例

    下面是关于Java中前台往后台传递多个id参数的攻略及示例说明。 前言 在Java后台开发中,经常需要前台传递多个id参数的情形。这时需要采用合适的方法将多个id参数传递到后台进行处理。本文介绍了两种常用的传递多个id参数的方法。 方法一: 传递多个字符串参数 适用范围:当需要在后台获取多个string类型参数时,可以采用该方法。 前台示例代码: <f…

    C# 2023年6月1日
    00
  • C#连接db2数据库的实现方法

    C#连接DB2数据库的实现方法可以分为以下几个步骤: 步骤一:下载DB2数据库驱动 在连接DB2数据库前,需要先下载DB2的驱动程序。可以到IBM官网下载DB2数据库驱动。下载地址为:https://www.ibm.com/support/pages/db2-jcc-drivers-download-db2-connect 步骤二:安装DB2数据库驱动 下载…

    C# 2023年6月2日
    00
  • C#使用Word中的内置对话框实例

    下面是详细的攻略: 使用Word中的内置对话框实例 在C#中,我们可以通过调用Word的内置对话框来实现相关功能。具体步骤如下: 引入Word对象库和对话框对象库 首先我们需要在项目中引入Word对象库和对话框对象库。 using Microsoft.Office.Interop.Word; using Microsoft.Office.Core; 创建Wo…

    C# 2023年6月3日
    00
  • c# 泛型类型参数与约束的深入分析

    C# 泛型类型参数与约束的深入分析 泛型类型参数 C# 泛型是指在编译时不确定数据类型,而在运行时再确定数据类型的一种机制。可以通过泛型类型参数来定义泛型类型。泛型类型参数在定义泛型类型时作为占位符使用。 具体来说,泛型类型参数的格式如下所示: class MyGenericClass<T> { } 在上述代码中,<T> 就是一个泛型…

    C# 2023年6月7日
    00
  • 记录.Net部署Docker-v指令使用

    记录Docker的-v指令使用 前言 之前我浅学了一下docker,方便部署.net项目(部署的是打包之后的项目) dockerfile文件如下: FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 5031 EXPOSE 7031 FROM mcr.microsoft.c…

    C# 2023年4月25日
    00
  • ASP.NET MVC使用Identity增删改查用户

    以下是“ASP.NET MVC使用Identity增删改查用户”的完整攻略: 什么是ASP.NET Identity ASP.NET Identity是一个框架,用于管理用户、角和权限。它是ASP.NET MVC一部分,可以轻松地将身份验证和授权添加到应用程序中。 ASP.NET MVC使用Identity增删改查用户的过程 以下是ASP.NET MVC使用…

    C# 2023年5月12日
    00
  • c#实现汉诺塔问题示例

    C#实现汉诺塔问题示例 汉诺塔问题是经典的数学问题之一,其规则如下: 有三根针,上面从上到下按小到大顺序套着圆盘,现在要把圆盘从其中一个针移到另一个针上。每次只能移动一个圆盘,且大的圆盘不能放在小的圆盘之上。问如何操作。 解题思路 汉诺塔问题和递归算法有着紧密联系,因此我们可以利用递归算法来解决汉诺塔问题。 设有a、b、c三个针,将n个盘子从a针移到b针: …

    C# 2023年6月6日
    00
  • C#敏感词过滤实现方法

    C#敏感词过滤实现方法攻略 敏感词过滤在许多场景下都是必须的,比如社交平台的评论、发送短信等。在C#中,实现敏感词过滤的方法主要有以下两种: 方法一:正则表达式过滤 正则表达式是一种实现模式匹配的语言,我们可以利用正则表达式的特性来实现敏感词过滤。下面是使用正则表达式实现敏感词过滤的代码示例: using System.Text.RegularExpress…

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