linssh2 sftp读取远端目录,获取远端文件或者目录信息
环境信息
- 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读取远端目录,获取远端文件或者目录信息相关推荐
- IOS中获取各个文件的目录路径的方法和NSFileManager类
转自:http://blog.sina.com.cn/s/blog_5fb39f910101di92.html IOS中获取各种文件的目录路径的方法 iphone沙箱模型的有四个文件夹,分别是什么,永 ...
- Golang获取目录下的文件及目录信息
一.获取当前目录下的文件或目录信息(不包含多级子目录) func main() {pwd,_ := os.Getwd()//获取文件或目录相关信息fileInfoList,err := ioutil. ...
- linux 目录权限上下文,文件和目录的安全上下文
文件和目录的安全上下文(涉及一些文件系统) 当我们敲下命令发起一个进程去操作(读取,复制,修改,删除等)一个目录或文件时,进程会根据我们的身份(目录的属主,属组,其他),对照目录或文件的属主,属组和其 ...
- Linux的基本学习(三)——目录配置、文件与目录管理
承接上面的内容来学习Linux FHS: 为了让文件配置目录有秩序,让用户可以了解已安装软件通常放置于哪个目录下,于是就有了FHS标准的出炉. HFS依据文件系统使用的频繁与否与是否允许用户随意修改, ...
- 8.var目录下的文件和目录详解
1./var目录下的文件和目录详解. /var (该目录存放的是不断扩充且经常修改的目录,包括各种日志文件或者pid文件,存放linux的启动日志和正在运行的程序目录(变化的目录:一般是日志文件,ca ...
- 9.proc目录下的文件和目录详解
1./proc目录下的文件和目录详解 /proc:虚拟目录.是内存的映射,内核和进程的虚拟文件系统目录,每个进程会生成1个pid,而每个进程都有1个目录. /proc/Version:内核版本 /pr ...
- file对象怎样获取文件的长度?_使用FSO对象获取整个文件夹的信息
大家好,我们今日讲解"VBA信息获取与处理"教程中第十八个专题"FSO对象对文件及文件夹的处理"的第三节"使用FSO对象获取整个文件夹的信息" ...
- java获取MP3文件的id3信息(包括封面图,歌词,艺术家,标题等)
MP3结构简单介绍 有时我们会发现MP3文件在电脑上可以显示出封面图,艺术家,标题,唱片集等等信息,这是因为MP3中有ID3标签信息. MP3文件大体上分为三个部分:ID3V2+音频数据+ID3V1 ...
- 读取nii或nii.gz文件中的信息即输出图像
读取nii或者nii.gz文件中的信息,并且输出图像. import matplotlib from matplotlib import pylab as plt import nibabel as ...
- python读取nii文件_读取nii或nii.gz文件中的信息即输出图像操作
读取nii或者nii.gz文件中的信息,并且输出图像. import matplotlib from matplotlib import pylab as plt import nibabel as ...
最新文章
- windows计算器
- 多重比对序列的格式及其应用
- android 应用内部组织关系
- Pinpoint【环境搭建 01】JDK\HBase\Pinpoint Collector+Web 最新版 2.3.3 安装配置运行验证及脚本文件分享(避坑指南捷径指北)
- [WinForm] VS2010发布、打包安装程序(超全超详细)
- JAVA5000行代码什么概念_GitHub - catstiger/mvc: 一个不超过5000行代码的,快速,简单,易用的MVC框架。...
- MongoDB安装、管理工具、操作
- java面试宝典pdf下载_Java面试问答PDF电子书免费下载(250+问题,60页)
- drools rule (二) LHS语法详解
- 华为年报透露员工收入:2016年平均薪酬近60万
- Simulink仿真计算中保留特定位数的小数
- 树莓派连接天猫精灵音箱通过蓝牙播放音乐的方法
- C语言三个点“...“符号含义之数组批量赋相同值
- maven命令错误:-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME
- 推荐 15 款编程游戏,从此谁都可以学编程!
- python输出计算结果_Python学习--02输入和输出、运算符
- GemBox.Pdf v15Crack
- 原生js简单实现定时抢月饼
- VS2017环境下配置OpenGL的简单方法(glut,glew,freeglut,gltools)
- WebSocket开发web页面与服务实时通信