好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

dy("nrwz");

查看更多关于C#如何访问共享文件夹或者磁盘的详细内容...

  阅读:55次