![](/img/trans.png)
[英]How to get the files of remote directory using a pattern with C# and WinSCP
[英]How to remove “.” and “..” files from remote directory with C# and WinSCP
我正在嘗試使用SFTP連接從遠程目錄中獲取文件數,但我得到了.
和..
這些點數像文件一樣,我在遠程目錄中有2個文件,但是計算4個文件,包括.
和..
有人可以幫我解決這個問題嗎?
這是我的代碼:
filesCount = session.ListDirectory(DataFile.sRemoteDirectory).Files.Count;
謝謝!
根據WinSCP文檔 :
您可以使用
Session.EnumerateRemoteFiles
方法,如果您想:
- 僅列出與通配符匹配的文件;
- 遞歸列出文件;
- 從列表中排除對此(。)和父(...)目錄的引用。
因此,您似乎應該更改代碼以執行更多類似的操作:
filesCount = 0;
filesCount = session.EnumerateRemoteFiles(DataFile.sRemoteDirectory).Files.Count();
session.Close();
您可以使用EnumerateRemoteFiles
而不是使用ListDirectory
,它不會包含“..”和“。”。
“” 和“..”分別表示該目錄和父目錄。
的.
和..
分別是在大多數文件系統上對this和parent目錄的引用。
要過濾它們,可以使用RemoteFileInfo
類的新屬性.IsThisDirectory
和.IsParentDirectory
:
filesCount =
session.ListDirectory(DataFile.sRemoteDirectory).Files
.Where(file => !file.IsThisDirectory && !file.IsParentDirectory).Count();
請注意,您必須使用Enumerable.Count()
擴展方法 ,而不是ICollection.Count
屬性,因為Enumerable.Where()
的結果是IEnumerable
,而不是Collection
。
或者為了使它更容易,使用Session.EnumerateRemoteFiles()
方法 ,它與EnumerationOptions.None
選項在功能上等同於Session.ListDirectory()
,只是它排除了.
和..
filesCount =
session.EnumerateRemoteFiles(
DataFile.sRemoteDirectory, null, EnumerationOptions.None).Count();
如果要篩選所有目錄,請使用:
filesCount =
session.ListDirectory(DataFile.sRemoteDirectory).Files
.Where(file => !file.IsDirectory).Count();
請嘗試session.EnumerateRemoteFiles。
盡管命名,但Files
集合不僅包含文件,還包含所有目錄條目,包括當前和父目錄引用。
如果您只想計算文件,請按IsDirectory
屬性過濾它們:
var filesCount = session.ListDirectory(dir).Files.Where(x => !x.IsDirectory).Count();
在最新版本中還有IsParentDirectory
和IsThisDirectory
屬性來過濾“..”和“。”。 無名稱比較的案例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.