【问题标题】:Trouble writing to file with SMBJ使用 SMBJ 写入文件时遇到问题
【发布时间】:2019-04-25 13:37:58
【问题描述】:

请帮忙。我无法使用 SMBJ 创建和写入文件。我收到此错误:

com.hierynomus.mssmb2.SMBApiException: STATUS_OBJECT_NAME_NOT_FOUND (0xc0000034): Create failed for <file path>

这是 Windows 错误还是 SMBJ 错误?我是否正确使用了 SMBJ API?我不太了解 Windows 文件属性/选项。

String fileName ="EricTestFile.txt";
String fileContents = "Mary had a little lamb.";

SMBClient client = new SMBClient();
try (Connection connection = client.connect(serverName)) {
    AuthenticationContext ac = new AuthenticationContext(username, password.toCharArray(), domain);
    Session session = connection.authenticate(ac);

    // Connect to Share
    try (DiskShare share = (DiskShare) session.connectShare(sharename)) {
        for (FileIdBothDirectoryInformation f : share.list(folderName, "*.*")) {
            System.out.println("File : " + f.getFileName());
        }

        //share.openFile(path, accessMask, attributes, shareAccesses, createDisposition, createOptions)
        Set<FileAttributes> fileAttributes = new HashSet<>();
        fileAttributes.add(FileAttributes.FILE_ATTRIBUTE_NORMAL);
        Set<SMB2CreateOptions> createOptions = new HashSet<>();
        createOptions.add(SMB2CreateOptions.FILE_RANDOM_ACCESS);
        File f = share.openFile(folderName+"\\"+fileName, new HashSet(Arrays.asList(new AccessMask[]{AccessMask.GENERIC_ALL})), fileAttributes, SMB2ShareAccess.ALL, SMB2CreateDisposition.FILE_OVERWRITE, createOptions);

        OutputStream oStream = f.getOutputStream();
        oStream.write(fileContents.getBytes());
        oStream.flush();
        oStream.close();
    }
} catch (IOException e) {
    e.printStackTrace();
}

【问题讨论】:

标签: java windows smbj


【解决方案1】:

如果您尝试打开的文件尚不存在,您需要使用不同的SMB2CreateDisposition。您现在使用的是FILE_OVERWRITE,记录为:

如果文件已经存在,则覆盖该文件;否则,操作失败。不得用于打印机对象。

您可能想使用FILE_OVERWRITE_IF,它可以:

如果文件已经存在,则覆盖该文件;否则,创建文件。此值不应用于打印机对象。

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    相关资源
    最近更新 更多