I can transfer one file from ftp server to local directory. using the following code
using (WebClient ftpClient = new WebClient())
{
ftpClient.Credentials = new System.Net.NetworkCredential("username", "password");
ftpClient.DownloadFile("ftp://website.com/abcd.docx", @"D:\\WestHam\test.docx");
but i don't know how to transfer multiple files. can anybody help me on this. }
Alternatively, type FTP and press Enter at the command prompt in Windows. From here, use the open command to connect to the server. Once you login, it takes you to the default directory. You can move to the one where you want to copy files to, and open it using the command.
To copy multiple files at once, use the mget command. You can supply a series of individual file names and you can use wildcard characters. The mget command copies each file individually, asking you for confirmation each time. Close the ftp connections.
The FTP get and put commands only transfer single files. To transfer multiple files, you can use the commands mget and mput .
To do this, open a Windows' File Explorer window and type ftp://[server name] or ftp://X.X.X.X where 'X' symbolizes the IP address of the FTP server, e.g. the IP address of your cRIO controller. You can then copy and paste files to or from the server like you would do with any normal folder on your storage as well.
Use this code, just replace the user credentials:
static void Main(string[] args)
{
FtpWebRequest ftpRequest = (FtpWebRequest)WebRequest.Create("ftp://mywebsite.com/");
ftpRequest.Credentials = new NetworkCredential("user345", "pass234");
ftpRequest.Method = WebRequestMethods.Ftp.ListDirectory;
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
List<string> directories = new List<string>();
string line = streamReader.ReadLine();
while (!string.IsNullOrEmpty(line))
{
directories.Add(line);
line = streamReader.ReadLine();
}
streamReader.Close();
using (WebClient ftpClient = new WebClient())
{
ftpClient.Credentials = new System.Net.NetworkCredential("user345", "pass234");
for (int i = 0; i <= directories.Count-1; i++)
{
if (directories[i].Contains("."))
{
string path = "ftp://mywebsite.com/" + directories[i].ToString();
string trnsfrpth = @"D:\\Test\" + directories[i].ToString();
ftpClient.DownloadFile(path, trnsfrpth);
}
}
}
Very Great and simple library FluentFTP
Check it out;
My config file:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<appSettings>
<add key="FtpHost" value="127.0.0.1"/>
<add key="FtpUser" value="username"/>
<add key="FtpPassword" value="password123"/>
<add key="FtpDirectory" value="/INTERESTING FILES/DATA"/>
<add key="FileExtension" value=".txt"/>
<add key="DownloadTo" value="C:\Downloads"/>
<add key="DeleteFilesAfterDownload" value="false"/>
</appSettings>
</configuration>
And a little FTP Library:
namespace FTPDownloadAdapter {
class Program
{
private static readonly string FtpHost = ConfigurationManager.AppSettings["FtpHost"];
private static readonly string FtpUser = ConfigurationManager.AppSettings["FtpUser"];
private static readonly string FtpPassword = ConfigurationManager.AppSettings["FtpPassword"];
private static readonly string FtpDirectory = ConfigurationManager.AppSettings["FtpDirectory"];
private static readonly string FileExtension = ConfigurationManager.AppSettings["FileExtension"];
private static readonly string DownloadTo = ConfigurationManager.AppSettings["DownloadTo"];
private static readonly string DeleteFilesAfterDownload = ConfigurationManager.AppSettings["DeleteFilesAfterDownload"];
static void Main(string[] args)
{
try{
DownloadFiles();
}
catch (Exception er){
Console.WriteLine(er.ToString());
}
}
private static void DownloadFiles(){
// create an FTP client
var client = new FtpClient(FtpHost) { Credentials = new NetworkCredential(FtpUser, FtpPassword) };
// if you don't specify login credentials, we use the "anonymous" user account
// begin connecting to the server
client.Connect();
Console.WriteLine($"Retrieving files with extension [{FileExtension}] from directory [{FtpDirectory}]");
foreach (FtpListItem item in client.GetListing(FtpDirectory)){
// if this is a file
if (item.Type == FtpFileSystemObjectType.File && (Path.GetExtension(item.FullName) == FileExtension)){
// get the file size
long size = client.GetFileSize(item.FullName);
// get modified date/time of the file or folder
DateTime time = client.GetModifiedTime(item.FullName);
// calculate a hash for the file on the server side (default algorithm)
FtpHash hash = client.GetHash(item.FullName);
// download the file
var fileName = Path.GetFileName(item.FullName);
var saveFilePath = Path.Combine(DownloadTo, fileName ?? throw new InvalidOperationException("File Appears to not have a name"));
Console.WriteLine($"Downloading file: {fileName}");
client.DownloadFile(localPath: saveFilePath, remotePath: item.FullName);
if (DeleteFilesAfterDownload == "true")
{
Console.WriteLine($"DeleteFilesAfterDownload is true, Deleting file from FTP : {item.FullName}");
client.DeleteFile(item.FullName);
Console.WriteLine("File deletion success");
}
else
{
Console.WriteLine($"DeleteFilesAfterDownload not true, skip deleting : {item.FullName}");
}
}
}
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With