我一直在嘗試一段時間來建立一個通過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