cftp文件列表
这样没法做到
可以用shell脚本来实现
② C++ 怎么获取FTP上所有的文件夹还有所有文件
通过CFtpFileFind递归进行查询,如果没有文件,会返回false,就不用进行再查找了。如果有文件或文件夹,通过getnext进行遍历查看就行
③ C# 获取Ftp某个目录下的所有文件(不要文件夹)
我在之前做过一个FTP的客户端工具。
drw 文件夹
-rw 文件(有扩展名或无扩展名)
我是根据服务端返回的报文进行分析获取的列表。
给你一些代码片段:
/// <summary>
/// 获取指定目录下的文件和文件夹。
/// </summary>
/// <param name="path">要获取的目录</param>
/// <param name="WRMethods">要发送到FTP服务器的密令。</param>
/// <returns></returns>
public string[] GetFileList(string path, string WRMethods)//从ftp服务器上获得文件列表
{
WebResponse response;
string[] downloadFiles;
int conut = 4;
StringBuilder result = new StringBuilder();
Connect(path);
if (FTPVariable.IsUseProxy_ftp)
{
reqFTP.Proxy = FtpProxy.GetFtpSelectProxy(FTPVariable.FtpCommand_transferProxyName);
}
reqFTP.ReadWriteTimeout = 12000;
//如果不应销毁到服务器的连接,则为 true;否则为 false。默认值为 true。
//
reqFTP.Method = WRMethods;
try
{
response = (FtpWebResponse)reqFTP.GetResponse();
goto Ftp_lbl_03;
}
catch (WebException webex)
{
GetReply(webex.Message);
if (ReplyCode == 530)// 未登录。
{
goto Ftp_lbl_04;
}
else if (ReplyCode == 550)
{
goto Ftp_lbl_04;
}
else
{
FtpManage.SetLog("获取列表超时,等候1秒后重试!");
goto Ftp_lbl_01;
}
}
Ftp_lbl_01:
try
{
FtpManage.SetLog("正在连接服务器 " + FtpRemoteHost);
response = GetRequest(path, WRMethods);
}
catch (WebException)
{
FtpManage.SetLog("获取列表超时,等候1秒后重试!");
downloadFiles = null;
System.Threading.Thread.Sleep(1000);
if (conut == 0)
{
goto Ftp_lbl_02;
}
conut--;
goto Ftp_lbl_01;
}
catch (Exception ex)
{
MSG.Show(ex.Message, Global.GetRS["msgTilteError"], MessageBoxButton.OK, MsgIco.Error);
FtpManage.SetLog("命令执行失败,原因:" + ex.Message);
downloadFiles = null;
return downloadFiles;
}
Ftp_lbl_03:
StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.Default);//中文文件名
string line = reader.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("\n");
line = reader.ReadLine();
}
if (result.Length == 0)
{
return null;
}
// to remove the trailing '\n'
result.Remove(result.ToString().LastIndexOf('\n'), 1);
reader.Close();
response.Close();
FtpManage.SetLog("命令已成功执行");
return result.ToString().Split('\n');
Ftp_lbl_04:
FtpManage.SetLog(ReplyInfo);
return null;
Ftp_lbl_02:
FtpManage.SetLog("550 获取列表失败,无法连接远程服务器!");
FtpManage.ftpmanage.IsRefurbish = true;
return null;
}
/// <summary>
/// 获取指定目录下的文件和文件夹。
/// </summary>
/// <param name="path">要获取的目录</param>
/// <returns></returns>
public string[] GetFileList(string path)//从ftp服务器上获得文件列表
{
return GetFileList(FTPVariable.FtpURLhead + FtpRemoteHost + "/" + path, WebRequestMethods.Ftp.ListDirectory);
}
/// <summary>
/// 获取指定目录下的文件和文件夹。
/// </summary>
/// <returns></returns>
public string[] GetFileList()//从ftp服务器上获得文件列表
{
return GetFileList(FTPVariable.FtpURLhead + FtpRemoteHost + "/", WebRequestMethods.Ftp.ListDirectory);
}
/// <summary>
/// 获取目录和文件名,返回目录表。
/// </summary>
/// <param name="path">要获取的目录</param>
/// <returns></returns>
public string[] GetCatalog_FileList(string path)
{
string[] fountainhead = GetFileList(FTPVariable.FtpURLhead + FtpRemoteHost + "/" + path, WebRequestMethods.Ftp.ListDirectoryDetails);
string[] Catalog = null;
if (fountainhead == null)
{
return null;
}
Catalog = new string[fountainhead.Length];
for (int i = 3; i < fountainhead.Length; i++)
{
Catalog[i - 3] += fountainhead[i].Substring(55, fountainhead[i].Length - 55) + "&";//FileName
Catalog[i - 3] += fountainhead[i].Substring(30, 12) + "&";//FileSize
Catalog[i - 3] += fountainhead[i].Substring(42, 13) + "&";//AmendDate
Catalog[i - 3] += fountainhead[i].Substring(0, 3) + "&";
}
return Catalog;
}
④ 怎么用cftpconnection类编写向ftp server上传文件
为了与FTP Internet服务器通讯,必须先创建一个CInternetSession实例,然后创建CFtpConnection对象。创建CFtpConnection对象不采用直接方式,而是调用CInternetSession::GetFtpConnertion来创建并返回一个指向它的指针。
CFtpConnection类的成员
构造函数 CFtpConnection 构造一个CFtpConnection对象
操作 SetCurrentDirectory 设置当前FTP目录
GetCurrentDirectory 获取此次连接的当前目录
GetCurrentDirectoryAsURL 获取作为URL的此次连接的当前目录
RemoveDirectory 从服务器移去指定目录
CreateDirectory 在服务器上构造一个目录
Rename 将服务器上的文件改名
Remove 从服务器上移去一个文件
PutFile 将一个文件放到服务器上
GetFile 从连接的服务器上获取一个文件
OpenFile 在连接的服务器上打开一个文件
Close 关闭与服务器的连接
实例一:上传文件
CString strAppName = AfxGetAppName();
CInternetSession* pSession = new CInternetSession(strAppName);
CFtpConnection* pConn = pSession->GetFtpConnection("
10.46.1.232","Anonymous","",21);
pConn->SetCurrentDirectory("test");
CString strLocfile,strRemotefile;
strLocfile="C:\\cmd.txt";
strRemotefile="cmd.txt";
pConn->PutFile(strLocfile,strRemotefile,FTP_TRANSFER_TYPE_ASCII);
pConn->Close();
return 0;
实例二:Ftp的打开文件操作函数:OpenFile
⑤ FTP外网可以登录但无法获取文件列表
要么ftp客户端换用CuteFTP9.x,试;
要么ftp服务端指定IP(Use the following IP): 为公网的IP;
两种都试下,我在局域网用无线路由器试,能成功。
但在家里用公网试不成功的原因是,我的宽带网是NAT代理式的,
没有独立的端口,所以失败。你把腾讯号留下,我跟你一起试。
⑥ 用JAVA获取FTP文件列表
学习一下ftp协议,然后用socket来模拟就可以了
⑦ linux下用c语言编程遍历远程ftp(linux系统)指定目录下的文件
FindFile FindNextFile
⑧ 请列出FTP的常见命令
1、DOS方式下FTP的使用
可在Windows系统cmd命令提示符下,输入
C: >FTP 域名
USER NAME: 管理员帐号
PASSWORD: 口令
FTP>PUT
LOCAL FILE: filename
REMOTE FILE: filename
即可上传
下载时使用GET命令
2、FTP常用命令
Ftp命令的功能是在本地机和远程机之间传送文件。该命令的一般格式如下:
c:> ftp 主机名/IP
最常用的命令有:
ls 列出远程机的当前目录
cd 在远程机上改变工作目录
lcd 在本地机上改变工作目录
ascii 设置文件传输方式为ASCII模式
binary 设置文件传输方式为二进制模式
close 终止当前的ftp会话
hash 每次传输完数据缓冲区中的数据后就显示一个#号
get(mget) 从远程机传送指定文件到本地机
put(mput) 从本地机传送指定文件到远程机
open 连接远程ftp站点
quit 断开与远程机的连接并退出ftp
? 显示本地帮助信息
3.Linux下FTP命令详解
FTP> ! 从 ftp 子系统退出到外壳。
FTP> ? 显示 ftp 命令说明。? 与 help 相同。
格式:? [command]
说明:[command]指定需要帮助的命令名称。如果没有指定 command,ftp 将显示全部命令的列表。
FTP> append 使用当前文件类型设置将本地文件附加到远程计算机上的文件。
格式:append local-file [remote-file]
说明:local-file 指定要添加的本地文件。
remote-file 指定要添加 local-file 的远程计算机上的文件。如果省略了 remote-file,本地文件名将被用作远程文件名。
FTP> ascii 将文件传送类型设置为默认的 ASCII。
说明:FTP 支持两种文件传送类型,ASCII 码和二进制图像。在传送文本文件时应该使用ASCII。
FTP> bell 切换响铃以在每个文件传送命令完成后响铃。默认情况下,铃声是关闭的。
FTP> binary(或bi) 将文件传送类型设置为二进制。
FTP> bye(或by) 结束与远程计算机的 FTP 会话并退出 ftp。
FTP> cd 更改远程计算机上的工作目录。
格式:cd remote-directory
说明:remote-directory 指定要更改的远程计算机上的目录。
FTP> close 结束与远程服务器的 FTP 会话并返回命令解释程序。
FTP> debug 切换调试。当调试打开时,发送到远程计算机的每个命令都打印,前面是字符串“>”。默认情况下,调试是关闭的。
FTP> delete 删除远程计算机上的文件。
格式:delete remote-file
说明:remote-file 指定要删除的文件。
FTP> dir 显示远程目录文件和子目录列表。
格式:dir [remote-directory] [local-file]
说明:remote-directory 指定要查看其列表的目录。如果没有指定目录,将使用远程计算机中的当前工作目录。Local-file 指定要存储列表的本地文件。如果没有指定,输出将显示在屏幕上。
FTP> disconnect 从远程计算机断开,保留 ftp 提示。
FTP> get 使用当前文件转换类型将远程文件复制到本地计算机。
格式:get remote-file [local-file]
说明:remote-file 指定要复制的远程文件。
Local-file 指定要在本地计算机上使用的名称。如果没有指定,文件将命名为 remote-file。
FTP >glob 切换文件名组合。组合允许在内部文件或路径名中使用通配符(*和?)。默认情况下,组合是打开的。
FTP >hash 切换已传输的每个数据块的数字签名 (#) 打印。数据块的大小是2048 字节。默认情况下,散列符号打印是关闭的。
FTP >help 显示 ftp 命令说明。
格式:help [command]
说明:command 指定需要有关说明的命令的名称。如果没有指定 command,ftp 将显示全部命令的列表。
FTP >lcd 更改本地计算机上的工作目录。默认情况下,工作目录是启动 ftp 的目录。
格式:lcd [directory]
说明:directory 指定要更改的本地计算机上的目录。如果没有指定directory,将显示本地计算机中当前的工作目录。
FTP >literal 将参数逐字发送到远程 FTP 服务器。将返回单个的 FTP 回复代码。
格式:literal argument [ ...]
说明:argument 指定要发送到 FTP 服务器的参数。
FTP >ls 显示远程目录文件和子目录的缩写列表。
格式:ls [remote-directory] [local-file]
说明:remote-directory 指定要查看其列表的目录。如果没有指定目录,将使用远程计算机中的当前工作目录。 local-file 指定要存储列表的本地文件。如果没有指定,输出将显示在屏幕上。
FTP >mdelete 删除远程计算机上的文件。
格式:mdelete remote-files [ ...]
说明:remote-files 指定要删除的远程文件。
FTP >mdir 显示远程目录文件和子目录列表。可以使用 mdir 指定多个文件。
格式:mdir remote-files [ ...] local-file
说明:remote-files 指定要查看列表的目录。必须指定 remote-files。请键入 - 使用远程计算机上的当前工作目录。
local-file 指定要还原列表的本地文件。请键入- 在屏幕上显示列表。
FTP >mget 使用当前文件传送类型将远程文件复制到本地计算机。
格式:mget remote-files [ ...]
说明:remote-files 指定要复制到本地计算机的远程文件。
FTP >mkdir 创建远程目录。
格式:mkdir directory
说明:directory 指定新的远程目录的名称。
FTP >mls 显示远程目录文件和子目录的缩写列表。
格式:mls remote-files [ ...] local-file
说明:remote-files 指定要查看列表的文件。必须指定 remote-files;
请键入- 使用远程计算机上的当前工作目录。
local-file 指定要存储列表的本地文件。请键入 - 以在屏幕上显示列表。
FTP >mput 使用当前文件传送类型将本地文件复制到远程计算机上。
格式:mput local-files [ ...]
说明:local-files 指定要复制到远程计算机的本地文件
FTP >open 与指定的 FTP 服务器连接。
格式:open computer [port]
说明:computer 指定要连接的远程计算机。可以通过 IP 地址或计算机名称指定计算机(DNS 或主机文件必须可用)。如果自动登录打开(默认),ftp 还将尝试自动将用户登录到 FTP 服务器port 指定用来联系 FTP 服务器的端口号。
FTP >prompt 切换提示。如果关闭提示时 mget 及 mput 传送所有文件,Ftp在多文件传送过程中将提示允许您有选择地检索或存储文件。默认情况下,提示是
打开的。
FTP >put 使用当前文件传送类型将本地文件复制到远程计算机上。
格式:put local-file [remote-file]
说明:local-file 指定要复制的本地文件。
remote-file 指定要在远程计算机上使用的名称。如果没有指定,文件将命名为 local-file。
FTP >pwd 显示远程计算机上的当前目录。
FTP >quit 结束与远程计算机的 FTP 会话并退出 ftp。
FTP >quote 将参数逐字发送到远程 FTP 服务器。将返回单个的 FTP 回复代码。
Quote 与 literal 相同。
格式:quote argument [ ...]
说明:argument 指定要发送到 FTP 服务器的参数。
FTP >recv 使用当前文件传送类型将远程文件复制到本地计算机。Recv 与 get相同。
格式:recv remote-file [local-file]
说明:remote-file 指定要复制的远程文件。
local-file 指定要在本地计算机上使用的名称。如果没有指定,文件将命名为 remote-file。
FTP >remotehelp 显示远程命令帮助。
格式:remotehelp [command]
说明:command 指定需要帮助的命令的名称。如果没有指定 command,ftp将显示全部远程命令的列表。
FTP >rename 重命名远程文件。
格式:rename filename newfilename
说明:filename 指定要重命名的文件。 newfilename 指定新的文件名。
FTP >rmdir 删除远程目录。
格式:rmdir directory
说明:directory 指定要删除的远程目录的名称。
FTP >send 使用当前文件传送类型将本地文件复制到远程计算机上。Send 与put 相同。
格式:send local-file [remote-file]
说明:local-file 指定要复制的本地文件。 remote-file 指定要在远程计算机上使用的名称。如果没有指定,文件将命名为 local-file。
FTP >status 显示 FTP 连接和切换的当前状态。
FTP >trace 切换数据包跟踪。Trace 在运行 ftp 命令时显示每个数据包的路由。
FTP >type 设置或显示文件传送类型。
格式:type [type-name]
说明:type-name 指定文件传送类型。默认设置为 ascii。如果没有指定type-name,将显示当前的类型。
FTP >user 指定远程计算机的用户。
格式:user username [password] [account]
说明:user-name 指定登录到远程计算机所使用的用户名。password 指定 user-name 的密码。如果没有指定,但必须指定,ftp 会提示输入密码。
account 指定登录到远程计算机所使用的帐户。如果没有指定account,但是需要指定,ftp 会提示您输入帐户。
FTP >verbose 切换 verbose 模式。如果打开,将显示所有 ftp 响应。在文件传送完成后,将同时显示与传送效率有关的统计信息。默认情况下,verbose 是打开的。
⑨ cftpfilefind怎么获取linux ftp服务器文件列表呢是不是这个cftpfilefi
问题: ftp客户端下载目录数据很慢,而此目录是挂载了NFS共享目录
现象: 使用ftp客户端访问nfs目录,下载上传速度 0.7kb/s, 而且对于零散的小文件(总共几百K),
每次传输新文件, 都会有30-40s的等待时间,400k文件要5分钟。
ftp配置如下:
[root@IDC-D-144 vsftpd]# cat vsftpd.conf|grep -v '#'
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ls_recurse_enable=YES
pam_service_name=vsftpd
userlist_enable=YES
listen=YES
tcp_wrappers=YES
chroot_list_enable=YES >>>>> 启用改变用户登录默认目录
chroot_list_file=/etc/vsftpd/chroot_list >>>>> 允许登录更改目录的用户列表
user_config_dir=/etc/vsftpd/vsftpd_user_conf >>>>>> 目录下记录着每个用户的默认登录地址
[root@IDC-D-144 vsftpd]# cat chroot_list
suns
hanjun
[root@IDC-D-144 vsftpd]#
[root@IDC-D-144 vsftpd]# cd vsftpd_user_conf/
[root@IDC-D-144 vsftpd_user_conf]# ls
hanjun suns
[root@IDC-D-144 vsftpd_user_conf]# cat hanjun
local_root=/usr/local/apache2059/htdocs/hipiao/
[root@IDC-D-144 vsftpd_user_conf]#
这样用户hanjun登录就会直接进入目录 /usr/local/apache2059/htdocs/hipiao/
vsftpd 的部分就是这样。
下载上传速度慢也是想了很多办法,是不是内外网问题? 是不是路由设置问题? 。。。
最后查到可能与NFS有关。 出现几个服务名:nfslock 、 portmap 、rpc
讲一下NFS的端口连接知识:
因为NFS支持的功能相当的多,而不同的功能都会使用不同的程序来启动,没启动一个功能就会启用一些
端口来传输资料,因此,NFS的功能所随影的端口没有固定住,而是随机取用一些未被使用的小于1024的
端口来作为传输之用。但如此一来又造成用户端想要连上服务器时的困扰,因为用户端得要知道服务器端的
相应端口才能够连接吧。
⑩ C语言如何连接FTP,连接成功后遍历FTP下目录,包括子目录,要源代码,而且是成功案例,自以为是的靠边站!
用libcurl实现,具体代码看
http://curl.haxx.se/libcurl/c/ftpget.html