我一直在尝试一段时间来建立一个通过C#与我们的大型机的FTP连接。到目前为止,我已经能够连接并上传一个文件到大型机,这很棒,但文件的记录长度错误,并且设置为变量,而不是固定的记录长度。经过相当多的研究后,我得出了与大多数人相同的结论,即ftpwebresponse函数不允许将“qoute SITE”命令发布到大型机。如果我错了,请不要犹豫,指正,继承人的代码我使用:C#与命令行FTP帮助
private void ftpButton_Click(object sender, EventArgs e)
{
string ftphost = "ftpSite";
string user = "myUser";
string pwd= "myPass";
string ftpfileName = "test.file2";
string inputfilePath="d:\\documents and settings\\gheff\\My Documents\\Visual Studio 2005\\Projects\\biWeeklyJob\\BiWeekly\\bin\\Debug\\file2.TXT";
string ftpfullpath = String.Format("ftp://{0}//'{1}'", ftphost,ftpfileName);
try
{
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
ftp.Credentials = new NetworkCredential(user,pwd);
ftp.KeepAlive = true;
ftp.UseBinary = false; //Use ascii.
ftp.Method = WebRequestMethods.Ftp.UploadFile;
FileStream fs = File.OpenRead(inputfilePath);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
Stream ftpstream = ftp.GetRequestStream();
ftpstream.Write(buffer, 0, buffer.Length);
ftpstream.Close();
}
catch (WebException ex)
{
String status = ((FtpWebResponse)ex.Response).StatusDescription;
throw new Exception(status);
}
}
所以偏向虎山行,我试图想的另一种方法,我已经成功地使用命令行来上传文件,更改文件属性并更改文件类型,以便我可以将JCL作业发送到大型机。我现在正在努力将其实现到我现有的c#应用程序中,但证明比我想象的要困难。
我绝不是c#的专家,但可以使用答案然后去做更多的研究,以获得更好的理解。
我已经看到这段代码C# cmd excute commands,但环顾四周,似乎只有一条命令可以由此发出。
所以我的问题是,我知道需要一段时间才能到达那里,是否有可能在命令提示符下运行下面的命令而不使用批处理文件,因为我在过程运行时查看一些反馈?
open "cmd.exe"
type "ftp"
type "FTPserver"
Type "USERNAME"
type "PASSWORD"
然后,一旦连接已经建立
然后运行预先定义的命令,即上传文件,上传和运行JCL作业。 我想我正在寻找的东西会写文本到cmd.exe,但保持会话?
我希望这是有道理的。
任何帮助将不胜感激。
感谢
我试着实现你的代码,但无法这样做。 Visual Studio不喜欢var,它说它没有名称空间?其中writeline不起作用,它说它不能将system.diagnostics转换为system.io。有什么建议么? – John 2011-04-06 17:32:27
@John:'var'是c#3关键字。只需用'Process'替换第一个'var'并用'StreamWriter'替换第二个'var' – 2011-04-07 07:34:27