软件编程
位置:首页>> 软件编程>> C#编程>> C#如何访问共享文件夹或者磁盘

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

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

标签: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();  
   }  
 }  
}

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

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com