c#与命令行FTP帮助

本文关键字:帮助 FTP 命令行 | 更新日期: 2023-09-27 17:49:19

我已经尝试了一段时间,现在通过c#与我们的主机建立ftp连接。到目前为止,我已经能够连接并上传一个文件到主机,这是伟大的,但文件有错误的记录长度,并设置为变量,而不是固定的记录长度。经过相当多的研究,我得出了与大多数人相同的结论,ftpwebresponse函数将不允许向主机发出"引用SITE"命令。如果我错了,请不要犹豫,纠正我,这是我使用的代码:

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执行命令,但环顾四周,似乎只有一个命令可以从这发出。

所以我的问题是,我知道花了一段时间才到达那里,是否有可能在命令提示符上运行以下命令而不使用批处理文件,因为我正在寻找一些反馈作为过程运行?

open "cmd.exe"
type "ftp"
type "FTPserver"
Type "USERNAME"
type "PASSWORD"

一旦连接建立

然后运行预定义的命令,即上传文件,上传和运行JCL作业。我想我要找的是什么东西,将文字写入cmd.exe,但保持会话?

我希望这有意义。

任何帮助都将是非常感激的。

谢谢

c#与命令行FTP帮助

所以这是你要求的代码,但我怀疑它解决了你的问题。

var cmd= new Process();
cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.RedirectStandardInput = true;
cmd.Start();
using (var stdin = cmd.StandardInput)
{
   stdin.WriteLine("ftp");
   stdin.WriteLine("FTPserver");
   stdin.WriteLine("USERNAME");
   stdin.WriteLine("PASSWORD");
} 
cmd.WaitForExit();
cmd.Close();

试试这个命令:

FTP -s:ftpcommandfilename url

感知跟随模式只能运行一个命令,您可以将FTP命令写入文件并使用该命令执行它们。

WriteLine("FTP -s:ftpcommandfilename url");

顺便说一下,我也找到了多ftp-cmd-line-in-code模式,如果你有的话,分享?

几年前,我在一个需要发送一些文件的简单应用程序中使用了这个CodeProject项目。可能对您有所帮助的是,它使用套接字与其他服务器进行通信。你可以发送原始的FTP命令,它应该避开你在FtpWebRequest对象中遇到的问题,而不必"shell out"并使用FTP命令行程序。

您可以尝试的另一种方法是提交jcl作业来分配具有进程所需的记录长度,块大小等的数据集。

一旦该任务完成,将数据"放入"刚刚正确分配的数据集中。z/OS ftp服务器应该从现有数据集中获取属性。

您是否考虑过使用支持COM接口并能够发送原始协议命令的商业FTP客户端?如果您正在编写要重新分发的软件,那么这可能不经济,但如果您只是试图为内部IT项目自动化重复出现的任务,那么就开发人员的时间而言,这绝对是值得的。Robo-FTP可能是连接大型机的好选择,因为它内置了ASCII到EBCDIC的转换。