C# 局域网文件管理 访问共享文件夹,可以像本地一样操作文件或文件夹,共享的文件夹属性要添加Everyone权限,关掉防火墙。
可以先用CMD连接测试下:
C:\Users\Administrator>net use \\192.168.2.111\Calendars "1234567890" /user:"Administrator"
命令成功完成。
Win+R 输入 gpedit.msc ,设置下账号锁定权限,非必要,如果不能连接成功,就改下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace CLord64.Utils
{
///
/// 局域网文件管理
///
public static class LanShareHelper
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
private struct NETRESOURCE
{
public int dwScope;
public int dwType;
public int dwDisplayType;
public int dwUsage;
public string lpLocalName;
public string lpRemoteName;
public string lpComment;
public string lpProvider;
}
// 重点:ref NETRESOURCE
[DllImport("mpr.dll", CharSet = CharSet.Unicode)]
private static extern int WNetAddConnection2(ref NETRESOURCE lpNetResource, string lpPassword, string lpUserName, int dwFlags);
[DllImport("mpr.dll", CharSet = CharSet.Unicode)]
private static extern int WNetCancelConnection2(string lpName, int dwFlags, bool fForce);
private const int RESOURCETYPE_DISK = 0x00000001;
private const int CONNECT_UPDATE_PROFILE = 0x00000001;
///
/// 建立局域网共享会话
///
/// \\192.168.2.111\Calendars
/// Administrator
/// 1234567890
/// 0成功
public static int ConnectShare(string remotePath, string user, string password)
{
var nr = new NETRESOURCE
{
dwType = RESOURCETYPE_DISK,
lpRemoteName = remotePath
};
return WNetAddConnection2(ref nr, password, user, 0);
}
public static int DisconnectShare(string remotePath, bool force = true)
{
return WNetCancelConnection2(remotePath, CONNECT_UPDATE_PROFILE, force);
}
public static string GetErrorMsg(int errorCode)
{
switch (errorCode)
{
case 0: return "成功";
case 5: return "拒绝访问";
case 67: return "找不到网络路径";
case 1219: return "存在旧连接冲突,请先断开";
case 1326: return "用户名或密码错误";
default: return $"未知错误码:{errorCode}";
}
}
}
}
//static void Main(string[] args)
//{
// string sharePath = @"\\192.168.2.111\Calendars";
// string user = "Administrator";
// string pwd = "1234567890";
// // 先尝试断开旧连接,规避 1219 冲突,同时清理异常会话
// LanShareHelper.DisconnectShare(sharePath);
// int ret = LanShareHelper.ConnectShare(sharePath, user, pwd);
// string[] files = Directory.GetFiles(@"\\192.168.2.111\Calendars");
// string target = Path.Combine(@"\\192.168.2.111\Calendars", "test.txt");
// File.WriteAllText(target, "Test", Encoding.UTF8);
// // SkiaSharp 保存、File.Copy 都可以正常操作
// Console.WriteLine($"【调试共享路径】>{sharePath}<");
// Console.WriteLine(LanShareHelper.GetErrorMsg(ret));
// // 程序关闭前执行一次
// LanShareHelper.DisconnectShare(@"\\192.168.2.111\Calendars");
// Console.Read();
//}