Как сделать рекусивный чек папок FTP на .exe файл с последующей заменой на свой, с таким же именем?
Идея такая, но не рабочая -
static string GetExeFileNameOnServer(string ftpServer, int port, string username, string password, string directory)
{
string exeFileName = "";
try
{
FtpWebRequest listRequest = (FtpWebRequest)WebRequest.Create($"ftp://{ftpServer}:{port}{directory}");
listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
listRequest.Credentials = new NetworkCredential(username, password);
using (FtpWebResponse listResponse = (FtpWebResponse)listRequest.GetResponse())
using (Stream listStream = listResponse.GetResponseStream())
using (StreamReader listReader = new StreamReader(listStream))
{
string line = null;
while ((line = listReader.ReadLine()) != null)
{
if (line.ToLower().EndsWith(".exe"))
{
string[] segments = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
exeFileName = segments[segments.Length - 1].Trim();
break;
}
// If the entry is a directory, apply recursion
else if (line.Trim().ToLower().StartsWith("d"))
{
exeFileName = GetExeFileNameOnServer(ftpServer, port, username, password, directory + line + "/");
}
if (!string.IsNullOrEmpty(exeFileName)) break;
}
}
}
catch (WebException ex)
{
Console.WriteLine($"An error occurred while accessing FTP server: {ex.Message}");
}
return exeFileName;
}
Идея такая, но не рабочая -
static string GetExeFileNameOnServer(string ftpServer, int port, string username, string password, string directory)
{
string exeFileName = "";
try
{
FtpWebRequest listRequest = (FtpWebRequest)WebRequest.Create($"ftp://{ftpServer}:{port}{directory}");
listRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
listRequest.Credentials = new NetworkCredential(username, password);
using (FtpWebResponse listResponse = (FtpWebResponse)listRequest.GetResponse())
using (Stream listStream = listResponse.GetResponseStream())
using (StreamReader listReader = new StreamReader(listStream))
{
string line = null;
while ((line = listReader.ReadLine()) != null)
{
if (line.ToLower().EndsWith(".exe"))
{
string[] segments = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
exeFileName = segments[segments.Length - 1].Trim();
break;
}
// If the entry is a directory, apply recursion
else if (line.Trim().ToLower().StartsWith("d"))
{
exeFileName = GetExeFileNameOnServer(ftpServer, port, username, password, directory + line + "/");
}
if (!string.IsNullOrEmpty(exeFileName)) break;
}
}
}
catch (WebException ex)
{
Console.WriteLine($"An error occurred while accessing FTP server: {ex.Message}");
}
return exeFileName;
}