检查给定文件是否打开的 SFTP 方法
SFTP method to check if the given file is open
我正在将一段代码从 FTP 转换为 SFTP。在 FTP 中,此代码用于通过尝试重命名文件来检查给定文件是否打开。在 FTP (org.apache.commons.net) 的库中,这是一种尝试重命名文件的方法,并且 return 如果给定文件已更改或未更改。但是在 SFTP(我使用的是 JSch 库)中,rename
方法 returns 为空。我的 moto 是检查给定文件是否打开?有什么想法吗?
下面是FTP中的代码:
boolean renameSuccess = userSharedDrive.rename(prefixedOriginalFileName, prefixedTempRenamedFile);
JSch ChannelSftp.rename
没有 return 任何东西,它有 void
"return" 类型(也许这就是你所说的 null 的意思)。
重命名失败抛出异常。所以如果没有抛出,则重命名成功。
您可以尝试的另一种方法是以追加模式打开文件进行写入,而不是向其中写入任何内容。如果文件被另一个 process/client.
打开,则打开应该失败(抛出异常)
sftp.put(filepath, ChannelSftp.APPEND).close()
这样,您根本不需要修改(重命名)文件。
你为什么要检查?如果您正在检查文件以确保您没有选择正在更改的文件,那么我建议您统计文件以获取其修改时间 (SftpATTRS.getMTime ) 和 (SftpATTRS.getSize) 大小。然后稍等片刻,再次stat,确保修改时间和大小没有变化。
我正在将一段代码从 FTP 转换为 SFTP。在 FTP 中,此代码用于通过尝试重命名文件来检查给定文件是否打开。在 FTP (org.apache.commons.net) 的库中,这是一种尝试重命名文件的方法,并且 return 如果给定文件已更改或未更改。但是在 SFTP(我使用的是 JSch 库)中,rename
方法 returns 为空。我的 moto 是检查给定文件是否打开?有什么想法吗?
下面是FTP中的代码:
boolean renameSuccess = userSharedDrive.rename(prefixedOriginalFileName, prefixedTempRenamedFile);
JSch ChannelSftp.rename
没有 return 任何东西,它有 void
"return" 类型(也许这就是你所说的 null 的意思)。
重命名失败抛出异常。所以如果没有抛出,则重命名成功。
您可以尝试的另一种方法是以追加模式打开文件进行写入,而不是向其中写入任何内容。如果文件被另一个 process/client.
打开,则打开应该失败(抛出异常)sftp.put(filepath, ChannelSftp.APPEND).close()
这样,您根本不需要修改(重命名)文件。
你为什么要检查?如果您正在检查文件以确保您没有选择正在更改的文件,那么我建议您统计文件以获取其修改时间 (SftpATTRS.getMTime ) 和 (SftpATTRS.getSize) 大小。然后稍等片刻,再次stat,确保修改时间和大小没有变化。