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_DENIED = 5,
  ERROR_INVALID_PASSWORD = 86,
  ERROR_INVALID_PARAMETER = 87,
  ERROR_BAD_DEV_TYPE = 66,
  ERROR_NOT_ENOUGH_MEMORY = 8,
  ERROR_NETWORK_BUSY = 54,
  ERROR_BAD_NETPATH = 53,
  ERROR_NO_NETWORK = 1222,
  ERROR_INVALID_HANDLE_STATE = 1609,
  ERROR_EXTENDED_ERROR = 1208,
  ERROR_DEVICE_ALREADY_REMEMBERED = 1202,
  ERROR_NO_NET_OR_BAD_PATH = 1203
 } 

 public enum RESOURCE_SCOPE
 {
  RESOURCE_CONNECTED = 1,
  RESOURCE_GLOBALNET = 2,
  RESOURCE_REMEMBERED = 3,
  RESOURCE_RECENT = 4,
  RESOURCE_CONTEXT = 5
 } 

 public enum RESOURCE_TYPE
 {
  RESOURCETYPE_ANY = 0,
  RESOURCETYPE_DISK = 1,
  RESOURCETYPE_PRINT = 2,
  RESOURCETYPE_RESERVED = 8,
 } 

 public enum RESOURCE_USAGE
 {
  RESOURCEUSAGE_CONNECTABLE = 1,
  RESOURCEUSAGE_CONTAINER = 2,
  RESOURCEUSAGE_NOLOCALDEVICE = 4,
  RESOURCEUSAGE_SIBLING = 8,
  RESOURCEUSAGE_ATTACHED = 16,
  RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
 } 

 public enum RESOURCE_DISPLAYTYPE
 {
  RESOURCEDISPLAYTYPE_GENERIC = 0,
  RESOURCEDISPLAYTYPE_DOMAIN = 1,
  RESOURCEDISPLAYTYPE_SERVER = 2,
  RESOURCEDISPLAYTYPE_SHARE = 3,
  RESOURCEDISPLAYTYPE_FILE = 4,
  RESOURCEDISPLAYTYPE_GROUP = 5,
  RESOURCEDISPLAYTYPE_NETWORK = 6,
  RESOURCEDISPLAYTYPE_ROOT = 7,
  RESOURCEDISPLAYTYPE_SHAREADMIN = 8,
  RESOURCEDISPLAYTYPE_DIRECTORY = 9,
  RESOURCEDISPLAYTYPE_TREE = 10,
  RESOURCEDISPLAYTYPE_NDSCONTAINER = 11
 } 

 [StructLayout(LayoutKind.Sequential)]
 public struct NETRESOURCE
 {
  public RESOURCE_SCOPE dwScope;
  public RESOURCE_TYPE dwType;
  public RESOURCE_DISPLAYTYPE dwDisplayType;
  public RESOURCE_USAGE dwUsage; 

  [MarshalAs(UnmanagedType.LPStr)]
  public string lpLocalName; 

  [MarshalAs(UnmanagedType.LPStr)]
  public string lpRemoteName; 

  [MarshalAs(UnmanagedType.LPStr)]
  public string lpComment; 

  [MarshalAs(UnmanagedType.LPStr)]
  public string lpProvider;
 } 

 public class NetworkConnection
 { 

  [DllImport("mpr.dll")]
  public static extern int WNetAddConnection2A(NETRESOURCE[] lpNetResource, string lpPassword, string lpUserName, int dwFlags); 

  [DllImport("mpr.dll")]
  public static extern int WNetCancelConnection2A(string sharename, int dwFlags, int fForce); 

  public static int Connect(string remotePath, string localPath, string username, string password)
  {
   NETRESOURCE[] share_driver = new NETRESOURCE[1];
   share_driver[0].dwScope = RESOURCE_SCOPE.RESOURCE_GLOBALNET;
   share_driver[0].dwType = RESOURCE_TYPE.RESOURCETYPE_DISK;
   share_driver[0].dwDisplayType = RESOURCE_DISPLAYTYPE.RESOURCEDISPLAYTYPE_SHARE;
   share_driver[0].dwUsage = RESOURCE_USAGE.RESOURCEUSAGE_CONNECTABLE;
   share_driver[0].lpLocalName = localPath;
   share_driver[0].lpRemoteName = remotePath; 

   Disconnect(localPath);
   int ret = WNetAddConnection2A(share_driver, password, username, 1); 

   return ret;
  } 

  public static int Disconnect(string localpath)
  {
   return WNetCancelConnection2A(localpath, 1, 1);
  } 

} 

测试方法:

public void TestNetWorkConnection()
  {
   string localpath = "X:";
   //int status = NetworkConnection.Connect(@"//192.168.0.2/test", localpath, @"test", "test");
   int status = NetworkConnection.Connect("////192.168.0.2//test", localpath, @"test", "test");
   if (status == (int)ERROR_ID.ERROR_SUCCESS)
   {
    FileStream fs = new FileStream(localpath + @"//123.txt", FileMode.OpenOrCreate);
    using (StreamWriter stream = new StreamWriter(fs))
    {
     stream.WriteLine("你好呀,成功了");
     stream.Flush();
     stream.Close();
    }
    fs.Close();
   }
   else
   {
    Console.WriteLine(status);
   }
   NetworkConnection.Disconnect(localpath);
  }

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

(0)

相关推荐

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

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

  • 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 {

  • 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#连接服务器共享文件夹的具体代码,供大家参考,具体内容如下 public class ClassConnWin { /// <summary> /// 连接共享文件夹 /// </summary> /// <param name="path">共享路径</param> /// <param name="user">用户名</param> /// <param name

  • 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

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

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

  • 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

  • python 与服务器的共享文件夹交互方法

    需求:从服务器拷贝照片到本地,然后再从本地照片筛选照片. 问题:从服务器拷贝到照片本地,太慢,速度只有20~30K,不能忍. 然后想到,利用python直接从服务器的共享文件夹筛选照片. 本以为还要什么socket通信之类,没想到只需将服务器共享文件夹地址当作本地电脑路径就万事大吉了.只需注意路径地址中的正反斜杠即可. 直接从window文件夹地址复制的路径如下: path = "\\11.64.222.50\dataPic" 若不经修改,会报IO error的错误. 改成 path

  • 详解VirtualBox中与主机共享文件夹的方法(图文)

    安装VirtualBox为了共享文件夹,折腾了一晚上!网上的很多资料都不是很全面,这里就全面的总结一下,如果有其他的疑问,可以留言多多交流. VirtualBox下载地址,版本为5.1.2 设置共享文件路径 点击虚拟机 设置-->选择 共享文件夹 (图1 设置共享文件夹) 设置共享文件夹路径 1 选择路径 2 填写自定义的共享名称(在后面需要与挂载路径相对应) 3 设置自动挂载/固定分配 (图2 设置共享文件路径属性) 安装VirtualBox增强工具 先安装必备的包 执行下面的命令: yum

  • 关于进程mDNSResponder.exe 总访问网络 附删除方法

    最近开机发现防火墙提示mDNSResponder.exe 总要访问网络,于是我发现了下面的删除mDNSResponder.exe 的方法,各位被mDNSResponder.exe 折磨的用户,可以解脱了,他们官方竟然也提供了mDNSResponder.exe 的删除方法,汗一个mDNSResponder.exe  进程文件:mDNSResponder 或者 mDNSResponder.exe  进程名称: Bonjour for Windows Component 描述:  mDNSRespon

  • VirtualBox 共享文件夹权限设置及使用方法

    VirtualBox 共享文件夹权限设置及使用方法 环境: 主机(host):windowsXP 虚拟机:VirtualBox 客户机 (guest):slackware/ubuntu/... 看过我上一篇写的为VirtualBox 安装additions的朋友应该很清楚,设置VirtualBox共享文件夹之前需要安装VirtualBox Guest Additions.如果没有安装,请参考我的上一篇文章. 共享文件夹就是使主机的wendows和客户机linux能彼此共享文件.在当前的架构情况下

  • 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,密码

  • 详解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

随机推荐