c#客户端文件上传不存数据库也不想写http服务器的共享实现方法

使用window自带共享实现
创建共享文件夹
net share SharedFolder=D:\SharedFolder /GRANT:everyone,full
只读
net share SharedFolder=D:\SharedFolder /GRANT:everyone,read
net share查看共享

指定用户名和密码访问

默认情况下,局域网访问会走 Windows 登录账号。
如果你想指定用户名密码,需要在共享电脑上创建局域网用户:

net user user123 123456 /add
net localgroup "Users" user123 /add

手动映射为本地盘(系统层面)
net use Z: \\192.168.1.10\shared 123456 /user:user123

映射盘符后,读取、写入、删除共享文件夹完全像操作本地磁盘一样,不需要特殊 API。

using System;
using System.IO;
using System.Runtime.InteropServices;

public static class NetworkShareHelper
{
    [DllImport("mpr.dll")]
    private static extern int WNetAddConnection2(ref NETRESOURCE netResource, string password, string username, int flags);

    [DllImport("mpr.dll")]
    private static extern int WNetCancelConnection2(string name, int flags, bool force);

    [StructLayout(LayoutKind.Sequential)]
    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;
    }

    private static void Connect(string networkFolder, string username, string password)
    {
        var netResource = new NETRESOURCE
        {
            dwType = 1, // RESOURCETYPE_DISK
            lpRemoteName = networkFolder
        };

        int result = WNetAddConnection2(ref netResource, password, username, 0);
        if (result != 0)
            throw new IOException($"无法连接共享文件夹({networkFolder}),错误码:{result}");
    }

    private static void Disconnect(string networkFolder)
    {
        WNetCancelConnection2(networkFolder, 0, true);
    }

    /// <summary>
    /// 上传本地文件到共享目录(支持任意资源文件)
    /// </summary>
    public static void UploadFile(string localFilePath, string networkDestPath, string username = null, string password = null)
    {
        string folder = Path.GetDirectoryName(networkDestPath);
        try
        {
            if (!string.IsNullOrEmpty(username))
                Connect(folder, username, password);

            // 创建目标目录(若不存在)
            Directory.CreateDirectory(folder);

            File.Copy(localFilePath, networkDestPath, true);
            Console.WriteLine($"文件上传成功:{Path.GetFileName(localFilePath)} → {networkDestPath}");
        }
        finally
        {
            if (!string.IsNullOrEmpty(username))
                Disconnect(folder);
        }
    }

    /// <summary>
    /// 下载文件到本地
    /// </summary>
    public static void DownloadFile(string networkPath, string localDestPath, string username = null, string password = null)
    {
        string folder = Path.GetDirectoryName(networkPath);
        try
        {
            if (!string.IsNullOrEmpty(username))
                Connect(folder, username, password);

            if (!File.Exists(networkPath))
                throw new FileNotFoundException("共享文件不存在:" + networkPath);

            File.Copy(networkPath, localDestPath, true);
            Console.WriteLine($"下载成功:{networkPath} → {localDestPath}");
        }
        finally
        {
            if (!string.IsNullOrEmpty(username))
                Disconnect(folder);
        }
    }

    /// <summary>
    /// 删除共享文件
    /// </summary>
    public static void DeleteFile(string networkPath, string username = null, string password = null)
    {
        string folder = Path.GetDirectoryName(networkPath);
        try
        {
            if (!string.IsNullOrEmpty(username))
                Connect(folder, username, password);

            if (File.Exists(networkPath))
            {
                File.Delete(networkPath);
                Console.WriteLine("文件已删除:" + networkPath);
            }
            else
            {
                Console.WriteLine("文件不存在:" + networkPath);
            }
        }
        finally
        {
            if (!string.IsNullOrEmpty(username))
                Disconnect(folder);
        }
    }
}

使用

class Program
{
    static void Main()
    {
        string username = "user";
        string password = "123456";

        // 本地文件
        string localFile = @"D:\images\car.jpg";

        // 共享路径(目标)
        string networkFile = @"\\192.168.1.10\shared\car.jpg";

        try
        {
            // 上传资源文件
            NetworkShareHelper.UploadFile(localFile, networkFile, username, password);

            // 下载回来验证
            NetworkShareHelper.DownloadFile(networkFile, @"D:\downloaded\car_copy.jpg", username, password);

            // 删除共享文件
            // NetworkShareHelper.DeleteFile(networkFile, username, password);
        }
        catch (Exception ex)
        {
            Console.WriteLine("操作失败:" + ex.Message);
        }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Windows CMD命令大全 命令简介 cmd是command的缩写.即命令行 。 虽然随着计算机产业的发展,W...
    独行小生阅读 3,853评论 0 5
  • 命令简介 cmd是command的缩写.即命令行 。 虽然随着计算机产业的发展,Windows 操作系统的应用越来...
    ___大鱼___阅读 5,005评论 1 5
  • win7 cmd管理员权限设置 net localgroup administrators 用户名 /add 把“...
    f675b1a02698阅读 10,769评论 0 11
  • 命令简介 cmd是command的缩写.即命令行 。 虽然随着计算机产业的发展,Windows 操作系统的应用越来...
    wp2001阅读 1,535评论 0 0
  • 运行操作 CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本) CM...
    小沐子_IT阅读 8,332评论 0 4

友情链接更多精彩内容