将ftp.exe与c#一起使用

本文关键字:一起 ftp exe | 更新日期: 2023-09-27 17:59:18

我需要在C#中的CMD中获得以下内容:

  1. 导航到位置
  2. 启动ftp.exe
  3. 打开服务器
  4. 用户
  5. 密码
  6. 获取文件
  7. 关闭
  8. 退出

我该如何做到这一点?

请注意,我不能将Net.FtpWebRequest用于此特定任务。

有没有一种方法可以像ftp用户那样在一行中登录:password@host

将ftp.exe与c#一起使用

是否尝试调用bat文件?

System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = "cmd.exe";
startInfo.Arguments = @"/c e:'test'ftp.bat";
startInfo.RedirectStandardOutput = true;
startInfo.UseShellExecute = false;
process.StartInfo = startInfo;
process.Start();

调用ftp.bat文件

Ftp.Bat文件包含。。。

ftp -s:commands.ftp

然后在你的命令.ftp

open <server_address>
<userid>
<password>
recv <source_file> <dest_file>
bye

或者类似的东西。

我采用的解决方案:

C#:

String ftpCmnds = "open " + folder.server + "'r'n" + folder.cred.user + "'r'n" + folder.cred.password + "'r'nget " + file + "'r'nclose'r'nquit";
//This is a custom method that I wrote:
Output.writeFile(basePath + "''" + Util.getDateFormated(reverseDate) + "''" + parentFolder + "''" + folder.server + "''", "tmp.txt", ftpCmnds);
Process p = new Process();
ProcessStartInfo info = new ProcessStartInfo();
info.WindowStyle = ProcessWindowStyle.Hidden;
info.FileName = "cmd.exe";
info.RedirectStandardInput = true;
info.UseShellExecute = false;
p.StartInfo = info;
p.Start();
using (StreamWriter sw = p.StandardInput)
{
   if (sw.BaseStream.CanWrite)
   {
      Console.WriteLine("Forcing Download from " + folder.server + folder.path + " of " + file + "'n"); log += "'r'n'r'n't't- Forcing Download from " + folder.server + folder.path + file + "'tto't" + basePath + "''" + Util.getDateFormated(reverseDate) + "''" + parentFolder + "''" + folder.server + "''" + file;
      sw.WriteLine("cd " + basePath + "''" + Util.getDateFormated(reverseDate) + "''" + parentFolder + "''" + folder.server + "''");
      sw.WriteLine("ftp -s:tmp.txt");
      sw.WriteLine("del tmp.txt");
      p.Close();
   }
}

唯一"糟糕"的是tmp.txt文件(在下载该文件所需的时间内可用)以纯文本形式包含服务器的用户名和密码。:-/
不过,我可以在名称后面附加一个随机字符串,使其更加安全。