[英]FTP Directory/SubDirectory listing using edtFTPnet,C#
在我的FTP服務器上,我有以下文件夾結構
- Parent Directory
-a.txt
-b.txt.old
-SubDirectory1
-c.txt
-NestedSubDirectory1
-d.txt
-SubDirectory2
-e.txt
-f.txt.old
SD的數量不固定。 我需要一種方法來獲取所有文件(可以是任何格式),而不使用父目錄中的.old擴展名。 我目前正在使用第三方dll edtFTPnet。
ftpConnection.GetFileInfos()Where(f => !(f.Name.EndsWith(".old"))).ToList();
這有助於我獲取當前工作目錄級別的文件和文件夾的詳細信息。
有人能告訴我一種方法來獲取父目錄,子目錄和嵌套子目錄的所有文件。
解決方案可能使用也可能不使用edtFTPnet。
FTPConnection.GetFileInfos()
返回一個FTPFile
數組。 類FTPFile
有一個布爾屬性Dir
,它指示其文件名是訪問文件(false)還是目錄(true)。
這樣的事情應該有效:
void ReadSubDirectories(FTPConncetion connection, FTPFile[] files)
{
foreach (var file in files)
{
if (file.Dir)
{
// Save parent directory
var curDir = connection.ServerDirectory;
// Move into directory
connection.ChangeWorkingDirectory(file.Name)
// Read all files
ReadSubDirectories(connection, connection.GetFileInfos());
// Move back into parent directory
connection.ChangeWorkingDirectory(curDir)
}
else
{
// Do magic with your files
}
}
}
但是,您可能最好只使用.NET的內置FtpWebRequest
類,因為它的方法和命名約定更清晰,更好地記錄,並且更容易在線查找引用。
嘗試使用這樣的擴展:
class Program
{
static void Main(string[] args)
{
using (var connection = new FTPConnection
{
ServerAddress = "127.0.0.1",
UserName = "Admin",
Password = "1",
})
{
connection.Connect();
connection.ServerDirectory = "/recursive_folder";
var resultRecursive =
connection.GetFileInfosRecursive().Where(f => !(f.Name.EndsWith(".old"))).ToList();
var resultDefault = connection.GetFileInfos().Where(f => !(f.Name.EndsWith(".old"))).ToList();
}
}
}
public static class FtpClientExtensions
{
public static FTPFile[] GetFileInfosRecursive(this FTPConnection connection)
{
var resultList = new List<FTPFile>();
var fileInfos = connection.GetFileInfos();
resultList.AddRange(fileInfos);
foreach (var fileInfo in fileInfos)
{
if (fileInfo.Dir)
{
connection.ServerDirectory = fileInfo.Path;
resultList.AddRange(connection.GetFileInfosRecursive());
}
}
return resultList.ToArray();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.