我已经与远程服务器建立了SSH连接,并想检查用户主文件夹中是否有名为“Images”的目录,如果没有,则创建该目录。我知道我必须在路径上做错事,但我无法弄明白:
NMSFTP *sftp = [[NMSFTP alloc] initWithSession:session];
if (![sftp directoryExistsAtPath:@"~/Images"]) {
[sftp createDirectoryAtPath:@"~/Images"];
}
这是调试器给我的输出:
NMSSH: Could not open file at path ~/Images (Error 0: )
NMSSHSession的实例连接并验证就好了,这是我不确定的路径。任何帮助,将不胜感激。
编辑:这是使用的两种方法的实现:
- (BOOL)directoryExistsAtPath:(NSString *)path {
LIBSSH2_SFTP_HANDLE *handle = [self openFileAtPath:path flags:LIBSSH2_FXF_READ mode:0];
if (!handle) {
return NO;
}
LIBSSH2_SFTP_ATTRIBUTES fileAttributes;
int rc = libssh2_sftp_fstat(handle, &fileAttributes);
libssh2_sftp_close(handle);
return rc == 0 && LIBSSH2_SFTP_S_ISDIR(fileAttributes.permissions);
}
- (BOOL)createDirectoryAtPath:(NSString *)path {
int rc = libssh2_sftp_mkdir(self.sftpSession, [path UTF8String],
LIBSSH2_SFTP_S_IRWXU|
LIBSSH2_SFTP_S_IRGRP|LIBSSH2_SFTP_S_IXGRP|
LIBSSH2_SFTP_S_IROTH|LIBSSH2_SFTP_S_IXOTH);
return rc == 0;
}
解决方案:事实证明,您还必须在NMSFTP实例(以及NMSSHSession实例)上调用connect才能使其正常工作。此代码正常运行:
NMSFTP *sftp = [[NMSFTP alloc] initWithSession:session];
[sftp connect];
if (![sftp directoryExistsAtPath:@"Images"]) {
[sftp createDirectoryAtPath:@"Images"];
}