共享文件夹相关操作
创建共享文件夹
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" ) ;
ManagementBaseObject inParams = managementClass. GetMethodParameters ( "Create" ) ;
ManagementBaseObject outParams;
inParams[ "Description" ] = Description;
inParams[ "Name" ] = ShareName;
inParams[ "Path" ] = FolderPath;
inParams[ "Type" ] = 0x0 ;
outParams = managementClass. InvokeMethod ( "Create" , inParams, null ) ;
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 {
[ 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 ;
private bool disposed;
public SharedTool ( string username, string password, string ip)
{
IntPtr pExistingTokenHandle = new IntPtr ( 0 ) ;
IntPtr pDuplicateTokenHandle = new IntPtr ( 0 ) ;
try
{
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) ;
}
}
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 ( ) ;
_Process. StandardInput. WriteLine ( "net use " + p_Path + " " + p_PassWord + " /user:" + p_UserName) ;
_Process. StandardInput. WriteLine ( "exit" ) ;
_Process. WaitForExit ( ) ;
string _ReturnText = _Process. StandardOutput. ReadToEnd ( ) ;
_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) ;
}