c# 4 : 检查 FTP 目录是不是存在

Posted

技术标签:

【中文标题】c# 4 : 检查 FTP 目录是不是存在【英文标题】:c# 4 : check if FTP directory existsc# 4 : 检查 FTP 目录是否存在 【发布时间】:2011-01-31 14:15:51 【问题描述】:

我为所有 FTP 传输使用了一个类,在 C# 3.5 中工作正常,但自从我更新到框架 4 后,我遇到了一些问题。

我在 Google 上搜索,但没有找到解决方案。

尤其是检查目录是否存在的方法:

public bool DirectoryExists(string directory)

  bool directoryExists = false;
  if (directory.Substring(0, 1) != "/")
    directory = "/" + directory;
  FtpWebRequest request = GetFtpWebRequest(host + directory, WebRequestMethods.Ftp.PrintWorkingDirectory);
  try
  
    using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
    
      directoryExists = true;
    
  
  catch (WebException)
  
    directoryExists = false;
  
  return directoryExists;


private FtpWebRequest GetFtpWebRequest(string url, string method)

  FtpWebRequest request = (FtpWebRequest)WebRequest.Create(url);
  request.UseBinary = true;
  request.KeepAlive = true;
  request.UsePassive = (mode == Modes.Passive);
  request.Timeout = Timeout.Infinite;
  request.ServicePoint.ConnectionLimit = 6;
  request.ReadWriteTimeout = Timeout.Infinite;
  if (credential == null)
    credential = new NetworkCredential(login, password);
  request.Credentials = credential;
  request.Method = method;
  return request;

DirectoryExists 方法总是返回 true(即使目录不存在)但仅在框架 4 上,如果目录不存在则 GetFtpWebRequest 抛出异常之前。

有人遇到过这个问题吗?

请不要告诉我使用其他库,因为我的所有程序都依赖于这个库,我不想全部更新...

【问题讨论】:

你有没有试过在返回 TRUE 之前检查响应的内容; 您是否将项目更新到 .NET 4.0?如果是这样,请检查您使用的是 .NET 4.0 Framework,而不是项目属性中的 .NET 4.0 客户端配置文件。这已经解决了我迄今为止遇到的所有兼容性问题中的大约 75%。 是的,我将项目更新为“.NET framework 4”。如果我使用“.NET framework 3.5”就可以了。在“.NET framework 4”上,如果目录存在与否,响应 StatusCode 始终为“PathnameCreated”... 经过多次测试,似乎使用框架4,PrintWorkingDirectory方法总是返回“/”(如果目录存在或不存在)。我的 FTP 服务器在 Ubuntu 上... 【参考方案1】:

只是改变:

WebRequestMethods.Ftp.PrintWorkingDirectory

到...

WebRequestMethods.Ftp.ListDirectory

您的代码将在 .NET 4.0 中正常工作。

【讨论】:

是的,这就是我所做的。但是进行这个测试需要大约 20 倍的时间,这对我的 FTP 应用程序来说是一个真正的问题......【参考方案2】:

问题是在新实现(4.0)中,客户端不发送命令 'CWD' 。从这里使用方法 SetMethodRequiresCWD() 微软解决方案 https://support.microsoft.com/en-us/kb/2134299

【讨论】:

以上是关于c# 4 : 检查 FTP 目录是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

在c#中检查路径中是不是存在文件夹?

ruby 使用Ruby Net :: FTP库的示例代码。登录FTP服务器,列出文件,检查目录是否存在,上传文件

如何判断 FTP 目录是不是存在

如何使用 C# 在 FTP 服务器上创建目录?

java 怎么查看ftp目录是不是存在

如何在 C# 中使用 FTP 列出目录内容?