ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

.Net读取共享文件夹的通用方法

2019-05-31 08:50:50  阅读:237  来源: 互联网

标签:IntPtr 读取 connector 文件夹 bool new Net SF string


定义类:

 1 public class ShareFolderHelper : IDisposable
 2     {
 3         //Obtains user token         
 4         [DllImport("advapi32.dll", SetLastError = true)]
 5         static extern bool LogonUser(string pszUsername, string pszDomain, string pszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
 6 
 7         //Close open handes returned by LogonUser         
 8         [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
 9         extern static bool CloseHandle(IntPtr handle);
10 
11         [DllImport("Advapi32.DLL")]
12         static extern bool ImpersonateLoggedOnUser(IntPtr hToken);
13 
14         [DllImport("Advapi32.DLL")]
15         static extern bool RevertToSelf();
16         const int LOGON32_PROVIDER_DEFAULT = 0;
17         const int LOGON32_LOGON_NEWCREDENTIALS = 9;//域控中的需要用:Interactive = 2         
18         private bool disposed;
19 
20         public ShareFolderHelper(string Username, string Password, string IP)
21         {
22             // initialize tokens         
23             IntPtr pExistingTokenHandle = new IntPtr(0);
24             IntPtr pDuplicateTokenHandle = new IntPtr(0);
25 
26             try
27             {
28                 // get handle to token         
29                 bool bImpersonated = LogonUser(Username, IP, Password, LOGON32_LOGON_NEWCREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref pExistingTokenHandle);
30 
31                 if (bImpersonated)
32                 {
33                     if (!ImpersonateLoggedOnUser(pExistingTokenHandle))
34                     {
35                         int nErrorCode = Marshal.GetLastWin32Error();
36                         throw new Exception("ImpersonateLoggedOnUser error;Code=" + nErrorCode);
37                     }
38                 }
39                 else
40                 {
41                     int nErrorCode = Marshal.GetLastWin32Error();
42                     throw new Exception("LogonUser error;Code=" + nErrorCode);
43                 }
44             }
45             finally
46             {
47                 // close handle(s)         
48                 if (pExistingTokenHandle != IntPtr.Zero)
49                 {
50                     CloseHandle(pExistingTokenHandle);
51                 }
52 
53                 if (pDuplicateTokenHandle != IntPtr.Zero)
54                 {
55                     CloseHandle(pDuplicateTokenHandle);
56                 }
57             }
58         }
59 
60         protected virtual void Dispose(bool disposing)
61         {
62             if (!disposed)
63             {
64                 RevertToSelf();
65                 disposed = true;
66             }
67         }
68 
69         public void Dispose()
70         {
71             Dispose(true);
72         }
73     }

实例:

 1 using (ShareFolderHelper helper = new ShareFolderHelper(connector.SF_USER_ACCOUNT, connector.SF_USER_PASSWORD, connector.SF_IP))
 2                 {
 3                     string Path = connector.SF_PATH;
 4 
 5                     var dicInfo = new DirectoryInfo(Path);//选择的目录信息    
 6 
 7                     //得到文件夹列表
 8                     DirectoryInfo[] folderList = dicInfo.GetDirectories("*.*", SearchOption.TopDirectoryOnly);
 9                     //得到文件列表
10                     FileInfo[] fileList = dicInfo.GetFiles("*.*", SearchOption.TopDirectoryOnly);//获取所有目录包含子目录下的文件
11                     
12                     if (folderList.Length > 0 || fileList.Length > 0)
13                     {
14                         //Step1: 得到根Folder(包含创建)
15                         SF_FOLDER rootArasFolder = GetArasRootFolder(connector);
16 
17                         //Step2: 同步文件
18                         SyncFileToAras(connector, rootArasFolder, fileList);
19 
20                         //Step3: 同步子文件夹
21                         SyncFolderToAras(connector, rootArasFolder, folderList);
22                     }
23                     else
24                     {
25                         MethodHelper.RecordLog("No folder or file in connector [" + connector.SF_NAME + "] [" + DateTime.Now + "]");
26                     }
27                 }

 

标签:IntPtr,读取,connector,文件夹,bool,new,Net,SF,string
来源: https://www.cnblogs.com/61007257Steven/p/10953200.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有