共享文件夹相关操作

共享文件夹相关操作

创建共享文件夹

  			if (!Directory.Exists(@"D:\sharedfile"))
            {
                Directory.CreateDirectory(@"D:\sharedfile");
            }
            int result = ShareNetFolder(@"D:\sharedfile", "sharedfile", "共享注释");
            if (result >= 0)
                MessageBox.Show("共享成功!");
		public int ShareNetFolder(string FolderPath, string ShareName, string Description)
		{
            try
            {
                ManagementClass managementClass = new ManagementClass("Win32_Share");
                // Create ManagementBaseObjects for in and out parameters  
                ManagementBaseObject inParams = managementClass.GetMethodParameters("Create");
                ManagementBaseObject outParams;
                // Set the input parameters  
                inParams["Description"] = Description;
                inParams["Name"] = ShareName;
                inParams["Path"] = FolderPath;
                inParams["Type"] = 0x0; // Disk Drive  
                outParams = managementClass.InvokeMethod("Create", inParams, null);
                // Check to see if the method invocation was successful  
                if ((uint)(outParams.Properties["ReturnValue"].Value) != 0)
                {
                    throw new Exception("Unable to share directory.");
                }
            }
            catch
            {
                return -1;
            }
            return 0;
        }

访问共享文件夹

(1)用Windows的API

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Runtime.InteropServices;  
  
namespace ConsoleApplication1  {  
    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 (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);  
                	}  
            	}  

(2)使用NET USE 来访问共享目录

        public string ConnectLan(string p_Path,string p_UserName,string p_PassWord)
        {
            System.Diagnostics.Process _Process = new System.Diagnostics.Process();
            _Process.StartInfo.FileName = "cmd.exe";          
            _Process.StartInfo.UseShellExecute = false;
            _Process.StartInfo.RedirectStandardInput = true;
            _Process.StartInfo.RedirectStandardOutput = true;
            _Process.StartInfo.CreateNoWindow = true;
            _Process.Start();
            //NET USE \\192.168.0.1 PASSWORD /USER:UserName
            _Process.StandardInput.WriteLine("net use " + p_Path + " " + p_PassWord + " /user:" + p_UserName);

            _Process.StandardInput.WriteLine("exit");
            _Process.WaitForExit();
            string _ReturnText = _Process.StandardOutput.ReadToEnd();// 得到cmd.exe的输出 
            _Process.Close();
            return _ReturnText;
        }  
案例
 			string _Service = @"\\192.168.0.200";
            string _Path = "CallCenter";
            ConnectLan(_Service, "Guest", "");

            DirectoryInfo _Direct = new DirectoryInfo(_Service + "\\" + _Path);
            foreach (DirectoryInfo _SubDirect in _Direct.GetDirectories())
            {
                MessageBox.Show(_SubDirect.Name);
            } 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值