【发布时间】:2017-11-02 07:58:03
【问题描述】:
我正在开发一个可以发送 ftp 请求的类,它有一个实用方法可以执行不同类型的 ftp 方法:
private FtpWebResponse DoFttpRequest(Uri uri, NetworkCredential credentials, string method, string file = null)
{
var request = (FtpWebRequest)WebRequest.Create(uri);
request.Credentials = credentials;
request.Method = method;
if (!string.IsNullOrEmpty(file))
{
using (var stream = request.GetRequestStream())
using (var writer = new StreamWriter(stream))
{
writer.Write(file);
}
}
return (FtpWebResponse)request.GetResponse();
}
如您所见,此方法执行 ftp 方法并将响应流返回给调用者。下面是使用该方法通过ftp将字符串内容写入文件的客户端方法:
public void WriteToFile(string path, string contents)
{
var uri = new Uri(path);
using (var ftpResponse = DoFttpRequest(uri, _credentials, Ftp.UploadFile, contents)) { }
}
如您所见,这里我使用空 using 语句 using (var ftpResponse = DoFttpRequest(uri, _credentials, Ftp.UploadFile, contents)) { } 来处理接收到的流。
这是处理这样的对象的好方法吗?是否有必要处置这个流,因为它可能会被垃圾收集器处置?
【问题讨论】:
-
如果您不打算使用它,为什么还需要引用它?我只想写
DoFttpRequest(new Uri(path), _credentials, Ftp.UploadFile, contents) -
需要处理掉。而不是使用你可以做
DoFttpRequest(..).Dispose()。如果你使用空使用 - 不需要声明变量:using (DoFtpRequest(...)) {}. -
在我看来,这个问题与
ftp或webrequest无关,一般来说更多的是using -
使用 = 尝试 { 不管 } 最后 { 处置 }。使用 using... 但将其与 { } 一起使用,以便清楚发生了什么。
-
@Marco 这是一个常见的约定,如果你有多个链接,你只使用一组括号。
标签: c# ftp dispose using webrequest