C#如何访问共享文件夹或者磁盘

本文实例为大家分享了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();
    }
  }
}  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C#访问网络共享文件夹的方法

    本文实例为大家分享了C#访问网络共享文件夹的具体代码,供大家参考,具体内容如下 using System.Runtime.InteropServices; public enum ERROR_ID { ERROR_SUCCESS = 0, // Success ERROR_BUSY = 170, ERROR_MORE_DATA = 234, ERROR_NO_BROWSER_SERVERS_FOUND = 6118, ERROR_INVALID_LEVEL = 124, ERROR_ACCESS

  • C#如何连接服务器共享文件夹

    本文实例为大家分享了C#连接服务器共享文件夹的具体代码,供大家参考,具体内容如下 public class ClassConnWin { /// <summary> /// 连接共享文件夹 /// </summary> /// <param name="path">共享路径</param> /// <param name="user">用户名</param> /// <param name

  • 解析使用C# lock同时访问共享数据

    经常碰到同时需要对某个数据进行操作,或者对某个文件进行读写操作,对于这些操作我们以前往往不能很好的进行处理,自从C#语言中引入了lock这个关键字,以上问题就比较容易予以解决了,下面就是一段简单的代码. 复制代码 代码如下: public class AccessControl(){    private static object privateObjectLock = new object();    public static AccessResult()    {       lock(

  • C#读写共享文件夹的方法

    本文实例为大家分享了C#读写共享文件夹的具体代码,供大家参考,具体内容如下 该试验分以下步骤: 1.在服务器设置一个共享文件夹,在这里我的服务器ip地址是10.80.88.180,共享文件夹名字是test,test里面有两个文件:good.txt和bad.txt,访问权限,用户名是admin,密码是admin. 2.新建一个webapplication项目,在前台页面加一个listbox,ID是ListBox1. 3.添加后台代码如下:其中包含的功能是读文件,这里以读good 文件为例:写文件,

  • C#如何访问共享文件夹或者磁盘

    本文实例为大家分享了C#访问共享文件夹或者磁盘的具体代码,供大家参考,具体内容如下 SharedTool: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; namespace ConsoleApplication5 { public class SharedTool : IDisposable {

  • ASP.NET访问共享文件夹的详细步骤

    假设找找看的ASP.NET程序在A服务器,索引文件在B服务器的ZzkIndex共享文件夹中,访问地址是\\192.168.18.18\ZzkIndex\.要实现就是在A服务器的ASP.NET程序中能读写共享文件夹\\192.168.18.18\ZzkIndex\中的文件. 具体操作步骤: (注:A服务器为ASP.NET程序所在服务器,B服务器为共享文件夹所在服务器) ①在两台服务器上建立相同用户名.相同密码的Windows帐户(A与B服务器都要建),比如假设这里用户名是ZzkIndexer,密码

  • Java读写Windows共享文件夹的方法实例

    项目常常需要有访问共享文件夹的需求,例如共享文件夹存储照片.文件等.那么如何使用Java读写Windows共享文件夹呢? Java可以使用JCIFS框架对Windows共享文件夹进行读写,就这个框架可以让我们像访问本地文件夹一下访问远程文件夹. JCIFS的网址: http://jcifs.samba.org/ JCIFS是使用纯Java开发的一个开源框架,通过smb协议访问远程文件夹.该框架同时支持Windows共享文件夹和Linux共享文件夹,不过,Linux共享文件夹需要安装Samba服务

  • 详解Windows与Linux共享文件夹互相访问

     详解Windows与Linux共享文件夹互相访问 首先安装并配置软件samba sudo yum install samba samba-client vim /etc/samba/smb.conf 找到security这行并将#注释符号去掉改成 security = share #共享模式 添加如下代码: [share] comment = share path = /home/test #设置共享文件夹目录 browseable = yes guest ok = yes writable

  • 服务器共享文件夹设置软件、文件共享服务器软件和共享文件夹加密工具的选择

    当前,很多企业都在局域网搭建了文件服务器,用于共享文件供局域网用户访问使用,并且很多共享文件都是单位积累的无形资产和商业机密,如何在允许员工访问服务器共享文件的同时还能保证服务器的安全呢?防止员工复制共享文件.将共享文件另存为本地以及不小心或恶意删除共享文件呢?总结起来,可以通过以下途径来实现:     方法一.通过操作系统的文件权限设置功能来分配不同用户访问共享文件的不同访问权限. 具体方法如下: 1. 打开"我的电脑"->"工具"->"文件

  • 服务器共享文件夹设置软件、局域网共享文件夹加密工具、文件共享服务器软件的选择

    当前,很多企业都在局域网搭建了文件服务器,用于共享文件供局域网用户访问使用,并且很多共享文件都是单位积累的无形资产和商业机密,如何在允许员工访问服务器共享文件的同时还能保证服务器的安全呢?防止员工复制共享文件.将共享文件另存为本地以及不小心或恶意删除共享文件呢?总结起来,可以通过以下途径来实现:     方法一.通过操作系统的文件权限设置功能来分配不同用户访问共享文件的不同访问权限. 具体方法如下: 1. 打开"我的电脑"->"工具"->"文件

  • VirtualBox 共享文件夹设置及开机自动挂载详细教程

    鉴于支付宝等服务无视我们Linux用户的存在,没办法,那只好在Linux上用VirtualBox虚拟一个Windows系统了.系统装好了,在日常使用过程中,往往要从VirtualBox的客户机(guest system)中使用主机(host system)里面的文件,那么通过共享文件夹的方式可以达成此目的. 我在这里写了个图文教程,说明设置过程,希望对大家有所帮助.(注:我的主机是Ubuntu Linux 8.04,客户机是Windows XP,VirtualBox版本2.2.4[下载]) 在V

  • Ubuntu samba下配置共享文件夹的方法

    文件放在ubuntu下,通过samba共享到windows,避免windows下不支持软链接的问题. 虚拟机安装的ubuntu系统,联网方式为NAT # 更新源 sudo apt-get update # 安装samba sudo apt-get install samba samba-common sudo apt-get install cifs-utils<strong> </strong> # 创建共享的目录 sudo mkdir /home/share sudo chmo

  • CentOS 7使用samba共享文件夹的完整步骤

    前言 Samba是在Linux系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成. SMB(Server Messages Block, 信息服务块)是一种在局域网上共享文件和打印机的一种通信协议, 它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务. SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统,打印机及其他资源. 比如我想共享/home/samba这个文件夹给其他计算机使用. 安装samba yum install -y samba 创

随机推荐