[英]Run an FTP commands batch file from C#
我已经用C#编写了一个winform应用程序,该程序可以修改脚本文件(服务器地址等)中的FTP命令,然后执行一个批处理文件,该文件应该从命令提示符处启动FTP并根据脚本下载文件。
当我运行应用程序外部的批处理文件时(从命令提示符或双击),文件下载正常,但是从应用程序执行批处理时什么也没有发生...
我还注意到以下差异:在外部运行批处理时,我在cmd窗口中看到“ ftp> open 10.1.1.1”。 从应用程序运行批处理时,我在cmd窗口中看到“打开10.1.1.1”(缺少“ ftp>”)。
我的猜测是我没有正确使用System.Diagnostics.Process()...
C#相关部分:
private void button1_Click(object sender, EventArgs e)
{
var cmd = new System.Diagnostics.Process();
cmd.StartInfo.FileName = "runFTP.bat";
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.WorkingDirectory = path;
cmd.Start();
cmd.WaitForExit();
cmd.Close();
}
}
批处理文件(runFTP.bat):
echo off
@echo Downloading files...
REM ==Start FTP with script==
ftp -i -s:ftpCmd.txt
del ftpCmd.txt
@echo Done!
@echo Exiting...
FTP脚本文件(ftpCmd.txt):
open 10.1.1.1
user
password
bin
cd /rootFolder/new
lcd C:\Downloads
mget *.*
bye
我找到了解决我的问题的方法。
通过在C#中添加以下System.Diagnostics.Process()StartInfo参数并将其更改为false,我可以下载文件并在命令提示符下获取缺少的“ ftp>”。
修改后的C#代码如下所示
var cmd = new System.Diagnostics.Process();
cmd.StartInfo.FileName = "runFTP.bat";
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardInput = false;
cmd.StartInfo.RedirectStandardOutput = false;
cmd.StartInfo.WorkingDirectory = path;
cmd.Start();
cmd.WaitForExit();
cmd.Close();
多亏有人在此上花费了时间。.希望这会有助于其他人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.