我需要用来FtpWebRequest
将文件放在FTP目录中.在上传之前,我首先想知道这个文件是否存在.
我应该使用什么方法或属性来检查此文件是否存在?
很久以前我写了下面的代码来确定FTP目录是否存在:
public bool DirectoryExists(string directory)
{
try
{
FtpWebRequest request = GetRequest(directory);
request.Method = WebRequestMethods.Ftp.ListDirectory;
using (FtpWebResponse response = request.GetResponse() as FtpWebResponse)
{
StreamReader sr = new StreamReader(response.GetResponseStream(), System.Text.Encoding.ASCII);
sr.ReadToEnd();
sr.Close();
response.Close();
}
return true;
}
catch { }
return false;
}
protected FtpWebRequest GetRequest(string filename = "")
{
FtpWebRequest request = WebRequest.Create(_host.GetUrl(filename)) as FtpWebRequest;
request.Credentials = new NetworkCredential(Username, Password);
request.Proxy = null;
request.KeepAlive = false;
return request;
}
Run Code Online (Sandbox Code Playgroud)
这段代码已经工作了好几年,但今天却没有.在测试不存在的目录时,代码DirectoryExists()
不再引发异常,并且方法错误地返回true
.
如果我将结果分配给sr.ReadToEnd()
字符串,则它是一个空字符串.
在这种情况下,代码_host.GetUrl(filename)
返回" …
我编写了以下代码来检测目录是否存在.该DirectoryExists
方法接受完全限定或相对路径.
public bool DirectoryExists(string directory)
{
try
{
FtpWebRequest request = GetRequest(directory);
request.Method = WebRequestMethods.Ftp.ListDirectory;
using (FtpWebResponse response = request.GetResponse() as FtpWebResponse)
using (StreamReader sr = new StreamReader(response.GetResponseStream(), System.Text.Encoding.ASCII))
{
sr.ReadToEnd();
}
return true;
}
catch { }
return false;
}
protected FtpWebRequest GetRequest(string filename = "")
{
FtpWebRequest request = WebRequest.Create(_host.GetUrl(filename)) as FtpWebRequest;
request.Credentials = new NetworkCredential(Username, Password);
request.Proxy = null;
request.KeepAlive = false;
return request;
}
Run Code Online (Sandbox Code Playgroud)
注意:_host.GetUrl(filename)
返回指定目录或文件名的完全限定路径.就我而言,这是ftp://www.mydomain.com/Articles/controls/precisely-defining-kilobytes-megabytes-and-gigabytes
.
这段代码已经工作了好几个月.但突然间它停止了工作.现在,DirectoryExists
当目录不存在时,不会引发异常.sr.ReadToEnd()
只返回一个空字符串. …
我需要从 C# 代码将文件夹(包含子文件夹和文件)从一台服务器上传到另一台服务器。我做了一些研究,发现我们可以使用 FTP 来实现这一点。但这样我就只能移动文件,而不能移动整个文件夹。感谢这里的任何帮助。