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

作者:边界流浪者 时间:2023-11-08 09:43:44 

本文实例为大家分享了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();  
   }  
 }  
}

来源:https://blog.csdn.net/qq_16542775/article/details/52779812

标签:C#,访问,共享文件
0
投稿

猜你喜欢

  • C#读写文件的方法汇总

    2022-03-01 04:41:41
  • java 之JNA中的Memory和Pointer的使用方法

    2022-10-25 14:18:35
  • Java递归运行的机制:递归的微观解读图文分析

    2022-09-24 20:04:09
  • 解决Properties属性文件中的值有等号和换行的小问题

    2023-09-07 19:22:58
  • Java数据结构及算法实例:三角数字

    2023-08-24 17:52:25
  • ElasticSearch查询文档基本操作实例

    2023-11-24 14:20:02
  • springcloud中RabbitMQ死信队列与延迟交换机实现方法

    2023-05-04 04:25:54
  • Android常见控件使用详解

    2023-03-11 13:15:23
  • Android中实现Webview顶部带进度条的方法

    2022-04-22 15:45:43
  • java学生管理系统界面简单实现(全)

    2023-11-28 21:35:25
  • Spring Boot @Conditional注解用法示例介绍

    2023-04-18 22:51:51
  • springboot过滤器和拦截器的实例代码

    2021-09-14 04:53:17
  • Android用户输入自动提示控件AutoCompleteTextView使用方法

    2022-02-25 14:59:50
  • Android Activity的启动过程源码解析

    2023-12-25 11:16:00
  • Android登录时密码保护功能

    2023-10-24 07:09:40
  • C#泛型委托的用法实例分析

    2021-09-16 23:29:52
  • 详细聊聊如何在C#循环中捕获局部变量

    2021-10-30 17:05:13
  • Spring Boot应用发布到Docker的实现

    2021-08-21 09:53:50
  • SpringCloud Config分布式配置中心使用教程介绍

    2023-09-15 00:56:06
  • Java数据结构学习之二叉树

    2023-04-25 12:08:27
  • asp之家 软件编程 m.aspxhome.com