C# FTP登陆上去后发送什么命令列出当前目录的文件和文件夹

sageking2 2009-06-13 09:17:09
1.我没用.NET 提供的FTP的一些类,而是用Socket发送FTP命令的方式完成个FTP客户端的功能。
我发送用户名和密码登陆成功后,我想列出此用户登陆后所在的目录的文件和文件夹,用什么命令啊?

我看网上别人都是SendCommand("LIST "+strRemotePath); 但是我要的是当前目录, strRemotePath我填"/"还是不行,怎么办啊?

2.将来可能要上传文件,用这样的相对路径行吗?
...全文
241 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sageking2 2009-06-14
  • 打赏
  • 举报
回复
谢谢大家!最后我发现:要先建立数据连接,在发送LIST命令。
Socket dataSocket = connectSocket(serverIp,serverPort);
SendCommand("LIST "+"/");
sageking2 2009-06-13
  • 打赏
  • 举报
回复
打开CMD-->ftp 192.168.0.* -->输入用户名和密码-->然后ls或dir 这我当然会啊!我的问题是用程序发送命令
SendCommand("USER " + strRemoteUser); //我知道用户名和密码
SendCommand("PASS " + strRemotePass);
然后怎么办啊?
mlliqiushi 2009-06-13
  • 打赏
  • 举报
回复
你的ftp是在linux下吧

用ls查询

ls -l
列出目录下所有文件
及其权限!~
mlliqiushi 2009-06-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sageking2 的回复:]
我试过,发送PWD返回一个 "/",
[/Quote]
嘿嘿,那说明你在你家里呢!~

~/
Soli 2009-06-13
  • 打赏
  • 举报
回复

06年写的一段代码,将就着看吧。我现在不会C#了,所以不要问我语法的问题。主要看一下流程就行。


/// <summary>

/// 重新连接服务器,并检测服务器支持命令,列出当前目录列表

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void reConnect_Click(object sender, System.EventArgs e)

{

System.Windows.Forms.Button senderButton = (System.Windows.Forms.Button)sender;

//Set up variables and String to write to the server.

Encoding ASCII = Encoding.GetEncoding("gb2312");

Byte[] recvBytes = new Byte[256];

Int32 recvLen = 0;



Socket client = connectSocket(this.r_CurPath.Text,21);

senderButton.Parent.Tag = client;



if(client == null)

{

Log(rtxtLog,1,"连接服务器失败!\n");

return;

}



Log(this.rtxtLog,1,"Socket 已连接。正在等候欢迎消息...\n");

recvLen = client.Receive(recvBytes,0,256,System.Net.Sockets.SocketFlags.None);

Log(this.rtxtLog,1,"接收到:" + ASCII.GetString(recvBytes,0,recvLen));



Log(rtxtLog,1,"连接服务器成功!正在验证 . . .\n");



//USER

string cmd = "USER anonymous\r\n";

Byte[] byteCmd = ASCII.GetBytes(cmd);

recvBytes = new Byte[256];



Log(rtxtLog,2,cmd);

client.Send(byteCmd,byteCmd.Length,System.Net.Sockets.SocketFlags.None);

recvLen = client.Receive(recvBytes,0,256,System.Net.Sockets.SocketFlags.None);

Log(rtxtLog,1,"接收到:" + ASCII.GetString(recvBytes,0,recvLen));

//验证

if(ASCII.GetString(recvBytes,0,3) == "331")

{

//服务器要求验证密码。

Log(rtxtLog,1,"服务器要求验证密码。\n");

cmd = "PASS password\r\n";

byteCmd = ASCII.GetBytes(cmd);





Log(rtxtLog,2,cmd);

client.Send(byteCmd,byteCmd.Length,System.Net.Sockets.SocketFlags.None);

recvLen = client.Receive(recvBytes,0,256,System.Net.Sockets.SocketFlags.None);



Log(rtxtLog,1,"接收到:" + ASCII.GetString(recvBytes,0,recvLen));





if(ASCII.GetString(recvBytes,0,3) != "230")

{

Log(rtxtLog,1,"登录失败!\n");

return;

}

else

Log(rtxtLog,1,"登录成功!\n");

}

//

// recvLen = client.Receive(recvBytes,0,256,System.Net.Sockets.SocketFlags.None);

// Log(rtxtLog,1,"接收到:" + ASCII.GetString(recvBytes,0,recvLen));



//PWD

cmd = "PWD\r\n";

byteCmd = ASCII.GetBytes(cmd);



Log(rtxtLog,2,cmd);

client.Send(byteCmd,byteCmd.Length,System.Net.Sockets.SocketFlags.None);

recvLen = client.Receive(recvBytes,0,256,System.Net.Sockets.SocketFlags.None);

Log(rtxtLog,1,"接收到:" + ASCII.GetString(recvBytes,0,recvLen));



//FEAT

cmd = "FEAT\r\n";

byteCmd = ASCII.GetBytes(cmd);



Log(rtxtLog,2,cmd);

client.Send(byteCmd,byteCmd.Length,System.Net.Sockets.SocketFlags.None);

recvLen = client.Receive(recvBytes,0,256,System.Net.Sockets.SocketFlags.None);

Log(rtxtLog,1,"接收到:" + ASCII.GetString(recvBytes,0,recvLen));



// //MODE Z

// cmd = "MODE Z\r\n";

// byteCmd = ASCII.GetBytes(cmd);

//

// Log(rtxtLog,2,cmd);

// client.Send(byteCmd,byteCmd.Length,System.Net.Sockets.SocketFlags.None);

// recvLen = client.Receive(recvBytes,0,256,System.Net.Sockets.SocketFlags.None);

// Log(rtxtLog,1,"接收到:" + ASCII.GetString(recvBytes,0,recvLen));



//检测该站点是否支持断点续传

Log(rtxtLog,1,"正在检测该站点是否支持断点续传 . . .\n");

if(isSupportMulti(client))

{

Log(rtxtLog,1,"该站点支持断点续传!\n");

}

else

{

Log(rtxtLog,1,"该站点不支持断点续传!\n");

}



//PASV

cmd = "PASV\r\n";

byteCmd = ASCII.GetBytes(cmd);



Log(rtxtLog,2,cmd);

client.Send(byteCmd,byteCmd.Length,System.Net.Sockets.SocketFlags.None);

recvLen = client.Receive(recvBytes,0,256,System.Net.Sockets.SocketFlags.None);

Log(rtxtLog,1,"接收到:" + ASCII.GetString(recvBytes,0,recvLen));



if(ASCII.GetString(recvBytes,0,3) != "227")

{

Log(rtxtLog,1,"该站点不支持PASV命令!\n");

return;

}

//得到数据Socket的IP和PORT

string recvstr = ASCII.GetString(recvBytes,0,recvLen);

string substr = recvstr.Substring(recvstr.IndexOf('(') + 1);

substr = substr.Substring(0,substr.Length -1);

char[] ch = {',',')'};

string[] str = substr.Split(ch,7);

string serverIp = str[0] + "." + str[1] + "." + str[2] + "." + str[3];

int serverPort = Int32.Parse(str[4]) * 256 + Int32.Parse(str[5]);



//建立数据连接

Socket dataSocket = connectSocket(serverIp,serverPort);

FTPFileList ffl = new FTPFileList(dataSocket,this.rtxtLog);

Thread fileListThread = new Thread(new ThreadStart(ffl.getFileList));



//TYPE

// cmd = "TYPE A\r\n";

// byteCmd = ASCII.GetBytes(cmd);

//

// Log(rtxtLog,2,cmd);

// client.Send(byteCmd,byteCmd.Length,System.Net.Sockets.SocketFlags.None);

// recvLen = client.Receive(recvBytes,0,256,System.Net.Sockets.SocketFlags.None);

// Log(rtxtLog,1,"接收到:" + ASCII.GetString(recvBytes,0,recvLen));



//LIST

cmd = "LIST \r\n";

byteCmd = ASCII.GetBytes(cmd);



Log(rtxtLog,2,cmd);

client.Send(byteCmd,byteCmd.Length,System.Net.Sockets.SocketFlags.None);

recvLen = client.Receive(recvBytes,0,256,System.Net.Sockets.SocketFlags.None);

Log(rtxtLog,1,"接收到:" + ASCII.GetString(recvBytes,0,recvLen));



if(ASCII.GetString(recvBytes,0,3) == "125" || ASCII.GetString(recvBytes,0,3) == "150")

{

Log(rtxtLog,1,"开始接收数据 . . .\n");

fileListThread.Start();

}

else{

Log(rtxtLog,1,"线程未启动!\n");

return;

}



recvLen = client.Receive(recvBytes,0,256,System.Net.Sockets.SocketFlags.None);

Log(rtxtLog,1,"接收到:" + ASCII.GetString(recvBytes,0,recvLen));



Log(rtxtLog,1,"正在列出文件列表,请稍候 . . .\n");

fileListThread.Join();



this.fillFTPFilesView(this.remoteFilesView,ffl.FileList);



Log(rtxtLog,1,"文件列表完毕。\n");

}


sageking2 2009-06-13
  • 打赏
  • 举报
回复
我试过,发送PWD返回一个 "/",
cnfcnf 2009-06-13
  • 打赏
  • 举报
回复
发送PWD
服务器会返回当前目录给你
不过要从返回字符串中截取出当前目录

111,112

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧