使用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()
。这有任何意义吗?
答案 0 :(得分:1)
使用FtpWebRequest对象将文件上载到服务器时,必须将文件内容写入通过调用GetRequestStream方法或其异步对应方(BeginGetRequestStream和EndGetRequestStream方法)获得的请求流。您必须先写入流并在发送请求之前关闭流。
表示如果不关闭请求流,可能会发生错误。如果您不关闭源流,那么您很可能最终会锁定文件,拒绝访问以供将来的请求和/或其他用户使用 - 尽管它取决于底层操作系统和文件的共享模式。
至于关闭请求:我没有使用WebRequest
&但是,按照上面提到的MSDN文档,你应该遵循的模式似乎是
除非你知道,否则这样做可能是个好主意。
答案 1 :(得分:0)
这是一种更清洁的方式,使用更少的流,并在完成后正确关闭它们。
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
用于终止异步操作,但是没有。不要在这里打电话。请按照Mitch Wheat的评论中的建议调查我所包含的using
声明。它会自动处理流对象。
至于您的其他问题,当然有人可以使用相同的凭据登录FTP服务器,但不能因为您的代码而导致。相同的凭据将始终成功登录。我认为您担心将连接保持活动状态,但这是服务器要处理的问题。