C#如何访问共享文件夹或者磁盘

 更新时间:2018年05月21日 14:14:46   作者:边界流浪者  
这篇文章主要为大家详细介绍了C#访问共享文件夹或者磁盘,需要用户名密码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C#访问共享文件夹或者磁盘的具体代码,供大家参考,具体内容如下

SharedTool:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Runtime.InteropServices;  
  
namespace ConsoleApplication5  
{  
  public class SharedTool : IDisposable  
  {  
    // obtains user token     
    [DllImport("advapi32.dll", SetLastError = true)]  
    static extern bool LogonUser(string pszUsername, string pszDomain, string pszPassword,  
      int dwLogonType, int dwLogonProvider, ref IntPtr phToken);  
  
    // closes open handes returned by LogonUser     
    [DllImport("kernel32.dll", CharSet = CharSet.Auto)]  
    extern static bool CloseHandle(IntPtr handle);  
  
    [DllImport("Advapi32.DLL")]  
    static extern bool ImpersonateLoggedOnUser(IntPtr hToken);  
  
    [DllImport("Advapi32.DLL")]  
    static extern bool RevertToSelf();  
    const int LOGON32_PROVIDER_DEFAULT = 0;  
    const int LOGON32_LOGON_NEWCREDENTIALS = 9;//域控中的需要用:Interactive = 2     
    private bool disposed;  
  
    public SharedTool(string username, string password, string ip)  
    {  
      // initialize tokens     
      IntPtr pExistingTokenHandle = new IntPtr(0);  
      IntPtr pDuplicateTokenHandle = new IntPtr(0);  
  
      try  
      {  
        // get handle to token     
        bool bImpersonated = LogonUser(username, ip, password,  
          LOGON32_LOGON_NEWCREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref pExistingTokenHandle);  
  
        if (bImpersonated)  
        {  
          if (!ImpersonateLoggedOnUser(pExistingTokenHandle))  
          {  
            int nErrorCode = Marshal.GetLastWin32Error();  
            throw new Exception("ImpersonateLoggedOnUser error;Code=" + nErrorCode);  
          }  
        }  
        else  
        {  
          int nErrorCode = Marshal.GetLastWin32Error();  
          throw new Exception("LogonUser error;Code=" + nErrorCode);  
        }  
      }  
      finally  
      {  
        // close handle(s)     
        if (pExistingTokenHandle != IntPtr.Zero)  
          CloseHandle(pExistingTokenHandle);  
        if (pDuplicateTokenHandle != IntPtr.Zero)  
          CloseHandle(pDuplicateTokenHandle);  
      }  
    }  
  
    protected virtual void Dispose(bool disposing)  
    {  
      if (!disposed)  
      {  
        RevertToSelf();  
        disposed = true;  
      }  
    }  
  
    public void Dispose()  
    {  
      Dispose(true);  
    }  
  }  
} 

 案例:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.IO;  
  
namespace ConsoleApplication5  
{  
  class Program  
  {  
    static void Main(string[] args)  
    {  
      using (SharedTool tool = new SharedTool("administrator", "12345678", "192.168.1.101"))  
      {  
        string selectPath = @"\\192.168.1.101\c$";  
  
        var dicInfo = new DirectoryInfo(selectPath);//选择的目录信息  
  
        DirectoryInfo[] dic = dicInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly);  
        foreach (DirectoryInfo temp in dic)  
        {  
          Console.WriteLine(temp.FullName);  
        }  
  
        Console.WriteLine("---------------------------");  
        FileInfo[] textFiles = dicInfo.GetFiles("*.*", SearchOption.TopDirectoryOnly);//获取所有目录包含子目录下的文件  
        foreach (FileInfo temp in textFiles)  
        {  
          Console.WriteLine(temp.Name);  
        }  
      }  
      Console.ReadKey();  
    }  
  }  
}  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C# 模式匹配完全指南

    C# 模式匹配完全指南

    模式匹配是一种高端的使用机制,它允许程序员在开发的时候以对象的类型作为条件筛选和分情况处理的一种手段,本文给大家介绍C# 模式匹配完全指南,感兴趣的朋友跟随小编一起看看吧
    2022-03-03
  • Base64编码解码原理及C#编程实例

    Base64编码解码原理及C#编程实例

    这篇文章主要介绍了Base64编码解码原理及C#编程实例,本文讲解了Base64编码由来、Base64编码原理、C#编程实现,需要的朋友可以参考下
    2014-10-10
  • C# 线程相关知识总结

    C# 线程相关知识总结

    这篇文章主要介绍了C# 线程相关知识,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C#基于Windows服务的聊天程序(1)

    C#基于Windows服务的聊天程序(1)

    这篇文章主要为大家详细介绍了C#基于Windows服务的聊天程序的第一篇,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 分享一个C#编写简单的聊天程序(详细介绍)

    分享一个C#编写简单的聊天程序(详细介绍)

    这是一篇基于Socket进行网络编程的入门文章,我对于网络编程的学习并不够深入,这篇文章是对于自己知识的一个巩固,同时希望能为初学的朋友提供一点参考。文章大体分为四个部分:程序的分析与设计、C#网络编程基础(篇外篇)、聊天程序的实现模式、程序实现
    2015-12-12
  • DevExpress之ChartControl的SeriesTemplate实例

    DevExpress之ChartControl的SeriesTemplate实例

    这篇文章主要介绍了DevExpress之ChartControl的SeriesTemplate用法实例,实现了饼状Series百分比显示的效果,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • C# 鼠标穿透窗体功能的实现方法

    C# 鼠标穿透窗体功能的实现方法

    通过以下代码,在窗体启动后调用方法SetPenetrate() 即可实现窗体的穿透功能,有需要的朋友可以参考一下
    2013-10-10
  • opencvsharp瑕疵检测的实现示例

    opencvsharp瑕疵检测的实现示例

    本文主要介绍了opencvsharp瑕疵检测的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • C# 将学生列表转换为字典的实现

    C# 将学生列表转换为字典的实现

    在开发应用程序时,管理和处理数据结构是非常重要的一环,本文就来介绍一下C# 将学生列表转换为字典的实现,感兴趣的可以了解一下
    2025-01-01
  • 亲自教你实现栈及C#中Stack源码分析

    亲自教你实现栈及C#中Stack源码分析

    大家都知道栈的实现方式有两种,一种是基于数组实现的顺序栈,另一种是基于链表实现的链式栈。这篇文章主要介绍了手把手教你实现栈以及C#中Stack源码分析,需要的朋友可以参考下
    2021-09-09

最新评论