FTP操作后正确的资源清理方法是什么?

本文关键字:方法 是什么 资源 操作 FTP | 更新日期: 2023-09-27 17:49:51

使用FTP上传文件后,我应该怎么做?我一般只是简单地关闭这两个流,即:

sourceStream.Close();
requestStream.Close();

如果它们保持打开状态会有什么影响?其他用户是否可以使用相同的凭据登录?我能再次登录吗?

为了更好地理解,下面是完整的代码:
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(
                          "bbbbb" + "bbbbbb" + "bbb/" + hj + "/" + hjj + ".txt");
request.Credentials = new NetworkCredential("bbbbb", "bbbbbb");
request.Method = WebRequestMethods.Ftp.UploadFile;
request.UsePassive = true;
StreamReader sourceStream = new StreamReader(j + @"oo.txt");
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
sourceStream.Close();
requestStream.Close();

此外,我有时只有request.open方法-没有分配任何close()方法,然后我在FTP操作的最后使用request.Abort()。这说得通吗?

FTP操作后正确的资源清理方法是什么?

MSDN文档说明:

当使用FtpWebRequest对象将文件上传到服务器时,必须将文件内容写入通过调用GetRequestStream方法或其异步对应方法BeginGetRequestStream和EndGetRequestStream方法获得的请求流中。您必须在发送请求之前写入流并关闭流。

表示如果不关闭请求流,可能会发生不好的事情。如果你不关闭源流,那么你很可能会锁定文件,拒绝未来请求和/或其他用户的访问——尽管这取决于底层操作系统和文件的共享模式。

关于关闭请求:我没有使用WebRequest &然而,根据上述MSDN文档,您应该遵循的模式似乎是

    创建请求获取请求流
  • 写入数据
  • 关闭请求流
  • 获取响应
  • 关闭响应对象(我假设它完成了请求)

这样做可能是个好主意,除非你不知道。

这里有一种更简洁的方法,使用更少的流,并在完成后正确地关闭它们。

Uri requestUri = new Uri(string.Concat("bbbbb", "bbbbbb", "bbb/", hj, "/", hjj, ".txt"));
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(requestUri);
request.Credentials = new NetworkCredential("bbbbb", "bbbbbb");
request.Method = WebRequestMethods.Ftp.UploadFile;
request.UsePassive = true;
byte[] fileContents = File.ReadAllBytes(@"oo.txt");
request.ContentLength = fileContents.Length;
using (Stream requestStream = request.GetRequestStream())
{
    requestStream.Write(fileContents, 0, fileContents.Length);
}

WebRequest.Abort用于终止异步操作,您没有异步操作。不要在这里叫它。请调查using声明,我在Mitch Wheat的评论中建议将其包含在内。它将自动处理流对象。

至于您的其他问题,当然有人可以使用相同的凭据登录到FTP服务器,但不是由于您的代码。相同的凭据将始终成功登录。

我想你是担心连接保持活跃,但这是服务器处理的问题。