首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FTP下载功能

FTP下载功能
EN

Code Review用户
提问于 2012-06-18 14:36:02
回答 3查看 4.7K关注 0票数 3

这是一个从FTP服务器下载单个文件并将其保存到磁盘的函数--这是我第一次使用FTP做任何事情,如果我错过了什么,请告诉我。

代码语言:javascript
复制
public void DownloadFile(string fileloc, string saveLoc)
{
    try
    {
        // Get the object used to communicate with the server.
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(fileloc);
        request.Method = WebRequestMethods.Ftp.DownloadFile;

        request.Credentials = new NetworkCredential(Username, Password);

        using (var response = (FtpWebResponse)request.GetResponse())
        {
            using (var fileStream = File.Create(saveLoc))
            {
                response.GetResponseStream().CopyTo(fileStream);
            }
        }
    }
    catch (Exception EX)
    {
        throw EX;               
    }
}
EN

回答 3

Code Review用户

回答已采纳

发布于 2012-06-18 16:02:16

首先,就像ANeves说的,您的catch唯一做的事情就是重置异常的堆栈跟踪,这不是您想要做的。只需完全删除try/catch,在这里就没有用了。

其次,我看不出有什么理由在这里使用WebRequest,使用WebClient要简单得多。

另外,您可能希望有更好的参数名称:fileloc没有说明它到底是什么,也没有使用通常的大写。loc是不必要的缩写(你不是想写一个推特帖子,因为每个字符都很重要,可读性更重要),而且太模棱两可。

代码语言:javascript
复制
public void DownloadFile(string url, string savePath)
{
    var client = new WebClient();
    client.Credentials = new NetworkCredential(Username, Password);
    client.DownloadFile(url, savePath);
}

可以将此方法重写为一个表达式,但我可能不会这样做:

代码语言:javascript
复制
public void DownloadFile(string url, string savePath)
{
    new WebClient { Credentials = new NetworkCredential(Username, Password) }
        .DownloadFile(url, savePath);
}
票数 6
EN

Code Review用户

发布于 2012-06-18 15:46:48

使用throw ex;重新抛出异常时,会刷新其堆栈跟踪。(帧?)这意味着异常似乎最初是在您的throw ex;行中引发的,并且丢失了以前的堆栈跟踪。

您只想简单地使用throw; -就像这样:

代码语言:javascript
复制
try {
  new Profiterole(); // BOOM!
} catch (Exception ex) {
  throw; // Preserves the stacktrace, showing that the Exception was raised in InitGlacing();
}

正如@svick所建议的那样:更好的是,根本没有try/catch;它在这里没有任何用途。

票数 1
EN

Code Review用户

发布于 2012-06-20 07:04:28

如果有一个缓冲区参数,或者至少重载函数来提供一个参数,这总是很好的。我认为使用FtpWebRequest与WebClient是合情合理的,因为增加缓冲区可以大大提高传输速度,并使所有可用的网络带宽饱和。你不会看到小文件的任何改进,但是如果你下载任何超过100 if的东西,你就会开始看到一个明显的不同。

只需将CopyTo作为

代码语言:javascript
复制
responseStream.CopyTo(fileStream, buffer)

它将为你做所有的工作。默认值为4096字节(4kb)。需要进行一些测试才能找到正确的缓冲区,但我发现32 It运行良好。

票数 0
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/12697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档