I have the following code that is used to download files from the server, which works for text files. The code is taken from MSDN samples:
public void DownloadFile(string serverPath, string localPath)
{
try
{
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + serverPath);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(_domain + "\\" + _username, _password);
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
string contents = reader.ReadToEnd();
File.WriteAllText(localPath, contents);
reader.Close();
response.Close();
}
catch (WebException ex)
{
string exMsg = string.Empty;
//add more error codes
FtpWebResponse response = (FtpWebResponse)ex.Response;
MessageBox.Show(response.StatusCode.ToString());
switch(response.StatusCode) {
case FtpStatusCode.NotLoggedIn:
exMsg = "wrong password";
break;
case FtpStatusCode.ActionNotTakenFileUnavailable:
exMsg = "file you are trying to load is not found";
break;
default:
exMsg = "The server is inaccessible or taking too long to respond.";
break;
}
throw new Exception(exMsg);
}
return;
}
However, it corrupts dlls and exe. Any ideas what is the culprit here?
StreamReaderis intended to read text data (it’s aTextReader), so using it will corrupt any binary file.You need to read from the stream directly.
You should be able to do:
Edit:
Since you’re using .NET 3.5, you can copy the stream manually: