日期:2014-05-19  浏览次数:20979 次

C#实现远程拷贝文件问题
各位高手,小弟现在作一个自动更新的机制,感觉是服务器向客户端推送信息,客户端收到后相应服务器,然后就连接,从服务器拷贝文件到客户端,现在有两个问题,一个是如何从服务器拷贝文件到客户端,还有一个就是替换文件的时候是先删除客户端文件替换还是直接覆盖,直接覆盖应该会弹出windows提示,想不弹出提示怎么办,谢谢,或者给小弟一个完整的自动更新机制的思路,或者给一个服务器拷贝文件到客户端的代码,谢谢

------解决方案--------------------
1.Copy文件方法很多了,你可以作为文件下载,文件COPY等.
2. 一般更新前,核心文件都会进行备份,一旦更新失败或者其他灾难性错误出现,遍会恢复原有文件,更新全部成功可自己选择是否删除原有文件.

------解决方案--------------------
下载文件
private bool DownLoad(string downloadUrl,string savepath)
{
Stream responseStream = null;
FileStream fileStream = null;
StreamReader reader = null;
try
{
FtpWebRequest downloadRequest =(FtpWebRequest)WebRequest.Create(downloadUrl);
downloadRequest.Credentials = new NetworkCredential(txtuser.Text.Trim(), txtpwd.Text.Trim());
FtpWebResponse downloadResponse =(FtpWebResponse)downloadRequest.GetResponse();
responseStream = downloadResponse.GetResponseStream();
string fileName =Path.GetFileName(downloadRequest.RequestUri.AbsolutePath);

if (fileName.Length == 0)
{
reader = new StreamReader(responseStream);
Console.WriteLine(reader.ReadToEnd());
}
else
{
fileStream = File.Create(savepath+fileName);
byte[] buffer = new byte[1024];
int bytesRead;
while (true)
{
bytesRead = responseStream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
break;
fileStream.Write(buffer, 0, bytesRead);
}
}
return true;
}
catch (UriFormatException ex)
{
MessageBox.Show(ex.Message);
return false;
}
catch (WebException ex)
{
MessageBox.Show(ex.Message);
return false;
}
catch (IOException ex)
{
MessageBox.Show(ex.Message);
return false;
}
finally
{
if (reader != null)
reader.Close();
else if (responseStream != null)
responseStream.Close();
if (fileStream != null)
fileStream.Close();
}
}

------解决方案--------------------
你可以先把以前的文件备份,判断是否更新成功,不成功则恢复到备份文件