You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中使用File.Move跨服务器传输文件需开放哪些防火墙端口?

C#中使用File.Move访问远程共享时的防火墙端口需求

好问题!当你通过C#的File.Move、File.Copy这类方法操作UNC路径(比如你代码里的\\MyRemoteServer\MyShare\MyPath\)时,本质是依赖Windows的SMB(Server Message Block)协议实现跨服务器的文件传输,所以防火墙需要开放SMB相关的端口。具体分两种常见场景:

主流Windows系统(Windows 7/Server 2008及以上)

只需要开放TCP 445端口就足够了。现在的Windows系统默认使用直接的SMB over TCP/IP,不再依赖NetBIOS,所以TCP 445是核心端口。

老旧Windows系统(Windows XP/Server 2003及更早)

如果你的环境里还有这类老系统,除了TCP 445,还需要额外开放:

  • TCP 139:NetBIOS会话服务端口
  • UDP 137、UDP 138:NetBIOS名称解析和数据报服务端口

不过现在这种场景已经很少见了,优先推荐只关注TCP 445。

额外提示

  1. 除了端口开放,还要确保程序运行的账号具备远程共享文件夹的读写权限——很多时候权限问题比端口问题更常见。
  2. 建议用Path.Combine拼接路径(像下面代码示例那样),比直接字符串拼接更安全,能自动处理路径分隔符的问题。

补全后的代码示例

using System;
using System.IO;

class MoveIt { 
    public static void Main() { 
        var localPath = @"c:\temp\"; 
        var remotePath = @"\\MyRemoteServer\MyShare\MyPath\";
        string sourceFile = Path.Combine(localPath, "MyTestFile.txt");
        string destFile = Path.Combine(remotePath, "MyTestFile.txt");
        
        try { 
            if (File.Exists(sourceFile) && Directory.Exists(remotePath)) { 
                File.Move(sourceFile, destFile);
                Console.WriteLine("文件移动成功!");
            } else {
                Console.WriteLine("错误:源文件不存在或目标远程目录无效");
            }
        } catch (IOException ex) {
            Console.WriteLine($"IO错误:{ex.Message}");
        } catch (UnauthorizedAccessException ex) {
            Console.WriteLine($"权限错误:{ex.Message}");
        } catch (Exception ex) {
            Console.WriteLine($"未知错误:{ex.Message}");
        }
    } 
}

内容的提问来源于stack exchange,提问作者Thiago_Espanta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:48:43