环境信息

  • rhel65
  • libssh2版本:libssh2-1.8.2

libssh2目前遇到几个注意事项:

  • 读取远端目录时,实体的名称没有存储在LIBSSH2_SFTP_ATTRIBUTES中(具体看读取远端目录的实例)
  • 在libssh2-1.5之后的版本判断远端是否是目录还是文件,不能使用系统的函数,得使用libssh2封装的函数(具体查看实例)参考
    https://www.libssh2.org//libssh2_sftp_fstat_ex.html
  • libssh2对于sftp操作的错误信息没有相关msg,只有对应的number,而且ibssh2_sftp_mkdir_ex(),如果远端文件存在,则返回的错误码为“LIBSSH2_FX_FAILURE”,所以自行封装了一个错误输出函数

实例一:读取远端目录

int sftpReadDir(LIBSSH2_SESSION *session, LIBSSH2_SFTP *sftp, const char * path)
{LIBSSH2_SFTP_HANDLE *sftp_handle;;LIBSSH2_SFTP_ATTRIBUTES attrs;int rc;sftp_handle = libssh2_sftp_opendir(sftp, path);if (!sftp_handle){processErr(session, sftp, path);return -1;}for(;;) {char mem[1024];char longentry[1024];/* loop until we fail */ rc = libssh2_sftp_readdir_ex(sftp_handle, mem, sizeof(mem),longentry, sizeof(longentry), &attrs);if(rc > 0) {/* rc is the length of the file name in the membuffer */ if(longentry[0] != '\0') {if (!strcmp(mem, ".") || !strcmp(mem, "..")){continue;}if(S_ISREG(attrs.permissions)){cout<<"file name is "<<mem;}else if(S_ISDIR(attrs.permissions)){cout<<"dir name is "<<mem;}}}elsebreak;}rc =  libssh2_sftp_closedir(sftp_handle);if (rc != 0){fprintf(stderr, "Can't close directory\n");return rc;}return 0;
}

实例二:读取文件或目录属性,并判断是文件还是目录

int sftpStat(LIBSSH2_SESSION *session, LIBSSH2_SFTP *sftp, const char * path,int & perm)
{LIBSSH2_SFTP_ATTRIBUTES attrs;LIBSSH2_SFTP_HANDLE *sftp_handle;int rc;while ((rc=libssh2_sftp_lstat(sftp,path, &attrs)==LIBSSH2_ERROR_EAGAIN));if (rc!=0){processErr(session, sftp, path);return -1;}else{    perm = attrs.flags & LIBSSH2_SFTP_ATTR_PERMISSIONS ? attrs.permissions : 0644;}return 0;
}int per;
rc = sftpStat(session,sftp_session,sstrRemoteFile.c_str(),per);
if(LIBSSH2_SFTP_S_ISREG(per)){cout<<"file";
}else if(LIBSSH2_SFTP_S_ISDIR(per)){cout<<"dir";
}

实例三:sftp 错误解析

int printErr(LIBSSH2_SESSION *session, LIBSSH2_SFTP *sftp,const char * path){if( libssh2_session_last_error(session,NULL,NULL,0)==LIBSSH2_ERROR_SFTP_PROTOCOL){switch (libssh2_sftp_last_error(sftp)){case     LIBSSH2_FX_FILE_ALREADY_EXISTS:cerr<<"Error: Directory or file already exists: "<<path<<endl;break;case     LIBSSH2_FX_PERMISSION_DENIED:cerr<<"Error: Permission denied: "<<path<<endl;break;case  LIBSSH2_FX_NO_SUCH_FILE:cerr<<"Error: No such File : "<<path<<endl;break;case   LIBSSH2_FX_EOF:cout<<"LIBSSH2_FX_EOF"<<endl;break;case    LIBSSH2_FX_FAILURE:cout<<"LIBSSH2_FX_FAILURE"<<endl;break;case    LIBSSH2_FX_NO_SUCH_PATH:cerr<<"Error: No such path : "<<path<<endl;break;case   LIBSSH2_FX_NO_SPACE_ON_FILESYSTEM:cerr<<"Error: No space left on device"<<endl;break;case     LIBSSH2_FX_NO_CONNECTION:cerr<<"Error: Unconnected"<<endl;break;case  LIBSSH2_FX_CONNECTION_LOST:cerr<<"Error: Connection lost"<<endl;break;case    LIBSSH2_FX_WRITE_PROTECT:cerr<<"Error: Write protect : "<<path<<endl;break;case     LIBSSH2_FX_DIR_NOT_EMPTY:cerr<<"Error: Dir is not empty : "<<path<<endl;break;case  LIBSSH2_FX_NOT_A_DIRECTORY:cout<<"LIBSSH2_FX_NOT_A_DIRECTORY"<<endl;cerr<<"Error: Path is not Dir : "<<path<<endl;break;default:cerr<<"Error: "<<libssh2_sftp_last_error(sftp)<<endl;break;}}return 0;

}

linssh2 sftp读取远端目录,获取远端文件或者目录信息相关推荐

  1. IOS中获取各个文件的目录路径的方法和NSFileManager类

    转自:http://blog.sina.com.cn/s/blog_5fb39f910101di92.html IOS中获取各种文件的目录路径的方法 iphone沙箱模型的有四个文件夹,分别是什么,永 ...

  2. Golang获取目录下的文件及目录信息

    一.获取当前目录下的文件或目录信息(不包含多级子目录) func main() {pwd,_ := os.Getwd()//获取文件或目录相关信息fileInfoList,err := ioutil. ...

  3. linux 目录权限上下文,文件和目录的安全上下文

    文件和目录的安全上下文(涉及一些文件系统) 当我们敲下命令发起一个进程去操作(读取,复制,修改,删除等)一个目录或文件时,进程会根据我们的身份(目录的属主,属组,其他),对照目录或文件的属主,属组和其 ...

  4. Linux的基本学习(三)——目录配置、文件与目录管理

    承接上面的内容来学习Linux FHS: 为了让文件配置目录有秩序,让用户可以了解已安装软件通常放置于哪个目录下,于是就有了FHS标准的出炉. HFS依据文件系统使用的频繁与否与是否允许用户随意修改, ...

  5. 8.var目录下的文件和目录详解

    1./var目录下的文件和目录详解. /var (该目录存放的是不断扩充且经常修改的目录,包括各种日志文件或者pid文件,存放linux的启动日志和正在运行的程序目录(变化的目录:一般是日志文件,ca ...

  6. 9.proc目录下的文件和目录详解

    1./proc目录下的文件和目录详解 /proc:虚拟目录.是内存的映射,内核和进程的虚拟文件系统目录,每个进程会生成1个pid,而每个进程都有1个目录. /proc/Version:内核版本 /pr ...

  7. file对象怎样获取文件的长度?_使用FSO对象获取整个文件夹的信息

    大家好,我们今日讲解"VBA信息获取与处理"教程中第十八个专题"FSO对象对文件及文件夹的处理"的第三节"使用FSO对象获取整个文件夹的信息" ...

  8. java获取MP3文件的id3信息(包括封面图,歌词,艺术家,标题等)

    MP3结构简单介绍 有时我们会发现MP3文件在电脑上可以显示出封面图,艺术家,标题,唱片集等等信息,这是因为MP3中有ID3标签信息. MP3文件大体上分为三个部分:ID3V2+音频数据+ID3V1 ...

  9. 读取nii或nii.gz文件中的信息即输出图像

    读取nii或者nii.gz文件中的信息,并且输出图像. import matplotlib from matplotlib import pylab as plt import nibabel as ...

  10. python读取nii文件_读取nii或nii.gz文件中的信息即输出图像操作

    读取nii或者nii.gz文件中的信息,并且输出图像. import matplotlib from matplotlib import pylab as plt import nibabel as ...

最新文章

  1. windows计算器
  2. 多重比对序列的格式及其应用
  3. android 应用内部组织关系
  4. Pinpoint【环境搭建 01】JDK\HBase\Pinpoint Collector+Web 最新版 2.3.3 安装配置运行验证及脚本文件分享(避坑指南捷径指北)
  5. [WinForm] VS2010发布、打包安装程序(超全超详细)
  6. JAVA5000行代码什么概念_GitHub - catstiger/mvc: 一个不超过5000行代码的,快速,简单,易用的MVC框架。...
  7. MongoDB安装、管理工具、操作
  8. java面试宝典pdf下载_Java面试问答PDF电子书免费下载(250+问题,60页)
  9. drools rule (二) LHS语法详解
  10. 华为年报透露员工收入:2016年平均薪酬近60万
  11. Simulink仿真计算中保留特定位数的小数
  12. 树莓派连接天猫精灵音箱通过蓝牙播放音乐的方法
  13. C语言三个点“...“符号含义之数组批量赋相同值
  14. maven命令错误:-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME
  15. 推荐 15 款编程游戏,从此谁都可以学编程!
  16. python输出计算结果_Python学习--02输入和输出、运算符
  17. GemBox.Pdf v15Crack
  18. 原生js简单实现定时抢月饼
  19. VS2017环境下配置OpenGL的简单方法(glut,glew,freeglut,gltools)
  20. WebSocket开发web页面与服务实时通信

热门文章

  1. T4 级老专家:AIOps 在腾讯的探索和实践
  2. adobe flash player 过期问题
  3. 为Array对象添加一个去除重复项的方法
  4. 客户端 cloudera-scm-agent启动报错
  5. supervisor 初探
  6. 鸡和兔子若干只,头有35个,脚有94个,求兔子和鸭个多少只
  7. intellij idea字体大小设置一秒完成
  8. 获取附近小区信息_怎么通过网上找到靠谱的租房信息?
  9. 图的遍历——深度优先搜索和广度(宽度)优先搜索(含例题)
  10. 公交门户分析与统计系统