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

替换jcifs为smbj库后无法列出并拷贝本地文件到远程SMB服务器

错误原因

你遇到的STATUS_BAD_NETWORK_NAME (0xc00000cc)报错,是因为传入的SMB共享名参数不符合smbj的规则,smbj和jcifs的路径适配逻辑不同,不能直接沿用jcifs的写法。

具体修改点
  • 修正共享名配置:session.connectShare()方法需要传入远程服务器开放的SMB共享名称,不能填/,也不需要添加斜杠、IP前缀。比如你远程服务器对外共享的目录名称是my_share,就直接传入"my_share"即可。
  • 修正列取路径格式:你要列取的路径是相对于共享根目录的相对路径,不需要使用双斜杠,直接用单正斜杠分割目录即可。
  • 变量名说明:你代码里的Local_SHARE_NAME命名有误,这个参数是远程服务器的共享名,不是本地路径相关参数。
修正后参考代码
import com.hierynomus.msfscc.fileinformation.FileIdBothDirectoryInformation;
import com.hierynomus.smbj.SMBClient;
import com.hierynomus.smbj.SmbConfig;
import com.hierynomus.smbj.auth.AuthenticationContext;
import com.hierynomus.smbj.connection.Connection;
import com.hierynomus.smbj.session.Session;
import com.hierynomus.smbj.share.DiskShare;

public class test1 {
    
    public static void main(String[] args) throws Exception {
        SmbConfig cfg = SmbConfig.builder()
            .withMultiProtocolNegotiate(true)
            .withSigningRequired(false)
            .withDfsEnabled(false)
            .build();
        
        // 替换为远程服务器实际的SMB共享名
        final String REMOTE_SHARE_NAME = "my_share"; 
        // 替换为共享目录下要列取的相对路径,列取共享根目录就填空字符串
        final String TARGET_PATH = "home/username/myfolder";
        SMBClient client = new SMBClient(cfg);

        try (Connection connection = client.connect("Remote_Server_IP")) {
            AuthenticationContext ac = new AuthenticationContext("user", "pwd".toCharArray(), "Domainname");
            Session session = connection.authenticate(ac);

            try (DiskShare share = (DiskShare) session.connectShare(REMOTE_SHARE_NAME)) {
                for (FileIdBothDirectoryInformation f : share.list(TARGET_PATH)) {
                    System.out.println("File : " + f.getFileName());
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            client.close();
        }
    }
}
前置验证项

运行代码前先确认以下条件,避免其他报错:

  • 远程SMB共享可正常访问:Windows端可在资源管理器输入\\远程IP\共享名,输入账号密码验证连通性;Linux端可通过smbclient //远程IP/共享名 -U 用户名命令验证。
  • 你使用的账号对目标共享目录、要列取的子目录有可读权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:48:03