如何删除"。"和" .."来自远程目录的C#和WinSCP文件

时间:2015-12-29 20:36:37

标签: c# sftp winscp winscp-net

我尝试使用SFTP连接从远程目录中获取文件数,但我得到...这些点数就像文件一样计算,我在远程目录中有2个文件,但计算包括...在内的4个文件。

有人可以帮我解决这个问题吗?

这是我的代码:

filesCount = session.ListDirectory(DataFile.sRemoteDirectory).Files.Count;                

谢谢!

5 个答案:

答案 0 :(得分:5)

根据the WinSCP documentation

  

如果您愿意,可以使用Session.EnumerateRemoteFiles方法:

     
      
  • 仅列出与通配符匹配的文件;
  •   
  • 递归列出文件;
  •   
  • 从列表中排除对此(。)和父(...)目录的引用。
  •   

因此,您似乎应该更改代码以执行更类似的操作:

filesCount = 0; 
filesCount = session.EnumerateRemoteFiles(DataFile.sRemoteDirectory).Files.Count();                
session.Close();

答案 1 :(得分:3)

您可以使用ListDirectory而不是EnumerateRemoteFiles,而不会包含“..”和“。”

“”。和“..”分别表示此目录和父目录。

答案 2 :(得分:2)

...分别是大多数文件系统上对此目录和父目录的引用。

要过滤它们,您可以使用RemoteFileInfo class的新属性.IsThisDirectory.IsParentDirectory

filesCount =   
    session.ListDirectory(DataFile.sRemoteDirectory).Files
        .Where(file => !file.IsThisDirectory && !file.IsParentDirectory).Count();

请注意,您必须使用Enumerable.Count() extension method而不是ICollection.Count property,因为Enumerable.Where()IEnumerable,而不是Collection

或者为了更加轻松,请使用Session.EnumerateRemoteFiles() method Session.ListDirectory()EnumerationOptions.None选项在功能上等同于{{3}},只是排除了.和{ {1}}。

..

如果要过滤所有目录,请使用:

filesCount =   
    session.EnumerateRemoteFiles(
        DataFile.sRemoteDirectory, null, EnumerationOptions.None).Count();               

答案 3 :(得分:0)

尝试使用session.EnumerateRemoteFiles。

答案 4 :(得分:0)

尽管有命名,Files集合不仅包含文件,还包含所有目录条目,包括当前和父目录引用。

如果您只想计算文件,请按IsDirectory属性过滤它们:

var filesCount = session.ListDirectory(dir).Files.Where(x => !x.IsDirectory).Count();

最新版本中还有IsParentDirectoryIsThisDirectory属性可以过滤" .."和"。"没有名称比较的案例。