首页 > 编程 > C# > 正文

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

2020-01-24 00:17:48
字体:
来源:转载
供稿:网友

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表