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();  
        }  
    }  
}  



  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Qt中访问共享文件夹需要使用QFile和QDir类,并且需要提供正确的共享文件夹路径和凭据(用户名密码)。 以下是一个示例代码,可以访问共享文件夹并列出其中的文件和文件夹: ``` c++ #include <QCoreApplication> #include <QFile> #include <QDir> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // 共享文件夹路径 QString sharePath = "\\\\192.168.1.100\\share"; // 设置凭据 QFile::setPermissions(sharePath, QFile::ReadOwner | QFile::WriteOwner); QFile::setPermissions(sharePath, QFile::ReadUser | QFile::WriteUser); QFile::setPermissions(sharePath, QFile::ReadGroup | QFile::WriteGroup); QFile::setPermissions(sharePath, QFile::ReadOther | QFile::WriteOther); QFile file(sharePath); file.setPermissions(QFile::ReadOwner | QFile::WriteOwner); file.setPermissions(QFile::ReadUser | QFile::WriteUser); file.setPermissions(QFile::ReadGroup | QFile::WriteGroup); file.setPermissions(QFile::ReadOther | QFile::WriteOther); // 设置用户名密码 file.setUserName("username"); file.setPassword("password"); // 打开共享文件夹 QDir dir(sharePath); if (!dir.exists()) { qDebug() << "共享文件夹不存在。"; return a.exec(); } dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot); QFileInfoList fileList = dir.entryInfoList(); foreach (QFileInfo fileInfo, fileList) { qDebug() << fileInfo.fileName(); } return a.exec(); } ``` 在上面的示例代码中,我们使用`QFile::setPermissions()`和`QFile::setUserName()`和`QFile::setPassword()`函数设置共享文件夹的凭据(用户名密码)。然后,我们使用`QDir`类打开共享文件夹,并使用`QDir::entryInfoList()`函数列出其中的文件和文件夹。 请注意,此示例代码中的用户名密码是硬编码的,这是不安全的。在实际应用中,应该将用户名密码存储在安全的地方,并动态地获取它们。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值