首页 > 编程语言 >c#获取共享文件夹中指定文件

c#获取共享文件夹中指定文件

时间:2023-01-28 14:23:03浏览次数:53  
标签:IntPtr string c# fileName int 文件夹 bool new 共享

 /// <summary>
        /// 获取共享文件夹中指定文件
        /// </summary>
        /// <param name="server">IP地址</param>
        /// <param name="userName">用户名</param>
        /// <param name="pwd">密码</param>
        /// <param name="shareDictoryName">共享文件夹名称</param>
        /// <param name="fileName">指定文件名称</param>
        /// <returns></returns>
        public static string GetShareFile(string server, string userName, string pwd, string shareDictoryName, string fileName)
        {
            try
            {
                using (ShareToolHelper tool = new ShareToolHelper(userName, pwd, server))
                {
                    string selectPath = $"\\\\{server}\\{shareDictoryName}";

                    var dicInfo = new DirectoryInfo(selectPath);//选择的目录信息 

                    //DirectoryInfo[] dic = dicInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly);
                    //foreach (DirectoryInfo temp in dic)
                    //{
                    //    Console.WriteLine(temp.FullName);
                    //}
                    var index = fileName.LastIndexOf(".");
                    var extendFileName = fileName.Substring(index, fileName.Length - index);
                    FileInfo[] textFiles = dicInfo.GetFiles($"*{extendFileName}", SearchOption.TopDirectoryOnly);//获取所有目录包含子目录下的文件 
                    foreach (FileInfo temp in textFiles)
                    {
                        if (temp.Name == fileName)
                        {
                            return $"\\\\{server}\\{shareDictoryName}\\{temp.Name}";
                        }
                    }
                    return "";
                }
            }
            catch (Exception ex)
            {

                throw;
            }
        }

 

 public class ShareToolHelper : IDisposable
    {
        [DllImport("advapi32.dll", SetLastError = true)]
        static extern bool LogonUser(string pszUsername, string pszDomain, string pszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
        [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 ShareToolHelper(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
            {
                if (pExistingTokenHandle != IntPtr.Zero)
                    CloseHandle(pExistingTokenHandle);
                if (pDuplicateTokenHandle != IntPtr.Zero)
                    CloseHandle(pDuplicateTokenHandle);
            }
        }

        public void Dispose()
        {
            Dispose(true);
        }

        protected virtual void Dispose(bool disposing)
        {
            if (!disposed)
            {
                RevertToSelf();
                disposed = true;
            }
        }
    }

 

标签:IntPtr,string,c#,fileName,int,文件夹,bool,new,共享
From: https://www.cnblogs.com/nayilvyangguang/p/17070222.html

相关文章