Skip to content

Quick Start Example

Robinicks edited this page Mar 5, 2020 · 14 revisions

Synchronous Version

This code demonstrates the simplest possible way to connect to an FTP server and perform FTP operations. See below for the same example using async/await operators.

// create an FTP client
FtpClient client = new FtpClient("123.123.123.123");

// if you don't specify login credentials, we use the "anonymous" user account
client.Credentials = new NetworkCredential("david", "pass123");

// begin connecting to the server
client.Connect();

// get a list of files and directories in the "/htdocs" folder
foreach (FtpListItem item in client.GetListing("/htdocs")) {
	
	// if this is a file
	if (item.Type == FtpFileSystemObjectType.File){
		
		// get the file size
		long size = client.GetFileSize(item.FullName);
		
		// calculate a hash for the file on the server side (default algorithm)
		FtpHash hash = client.GetChecksum(item.FullName);
	}
	
	// get modified date/time of the file or folder
	DateTime time = client.GetModifiedTime(item.FullName);
	
}

// upload a file
client.UploadFile(@"C:\MyVideo.mp4", "/htdocs/MyVideo.mp4");

// rename the uploaded file
client.Rename("/htdocs/MyVideo.mp4", "/htdocs/MyVideo_2.mp4");

// download the file again
client.DownloadFile(@"C:\MyVideo_2.mp4", "/htdocs/MyVideo_2.mp4");

// compare the downloaded file with the server
if (client.CompareFile(@"C:\MyVideo_2.mp4", "/htdocs/MyVideo_2.mp4") == FtpCompareResult.Equal){  }

// delete the file
client.DeleteFile("/htdocs/MyVideo_2.mp4");

// upload a folder and all its files
client.UploadDirectory(@"C:\website\videos\", @"/public_html/videos", FtpFolderSyncMode.Update);

// upload a folder and all its files, and delete extra files on the server
client.UploadDirectory(@"C:\website\assets\", @"/public_html/assets", FtpFolderSyncMode.Mirror);

// download a folder and all its files
client.DownloadDirectory(@"C:\website\logs\", @"/public_html/logs", FtpFolderSyncMode.Update);

// download a folder and all its files, and delete extra files on disk
client.DownloadDirectory(@"C:\website\dailybackup\", @"/public_html/", FtpFolderSyncMode.Mirror);

// delete a folder recursively
client.DeleteDirectory("/htdocs/extras/");

// check if a file exists
if (client.FileExists("/htdocs/big2.txt")){ }

// check if a folder exists
if (client.DirectoryExists("/htdocs/extras/")){ }

// upload a file and retry 3 times before giving up
client.RetryAttempts = 3;
client.UploadFile(@"C:\MyVideo.mp4", "/htdocs/big.txt", FtpRemoteExists.Overwrite, false, FtpVerify.Retry);

// disconnect! good bye!
client.Disconnect();

Async Version

This code demonstrates how to connect to an FTP server and perform FTP operations using the new async/await operators in .NET 4.5+ and .NET Core.

// create an FTP client
FtpClient client = new FtpClient("123.123.123.123");

// if you don't specify login credentials, we use the "anonymous" user account
client.Credentials = new NetworkCredential("david", "pass123");

// begin connecting to the server
await client.ConnectAsync();

// get a list of files and directories in the "/htdocs" folder
foreach (FtpListItem item in await client.GetListingAsync("/htdocs")) {
	
	// if this is a file
	if (item.Type == FtpFileSystemObjectType.File){
		
		// get the file size
		long size = await client.GetFileSizeAsync(item.FullName);
		
		// calculate a hash for the file on the server side (default algorithm)
		FtpHash hash = await client.GetChecksumAsync(item.FullName);
	}
	
	// get modified date/time of the file or folder
	DateTime time = await client.GetModifiedTimeAsync(item.FullName);
}

// upload a file
await client.UploadFileAsync(@"C:\MyVideo.mp4", "/htdocs/MyVideo.mp4");

// rename the uploaded file
await client.RenameAsync("/htdocs/MyVideo.mp4", "/htdocs/MyVideo_2.mp4");

// download the file again
await client.DownloadFileAsync(@"C:\MyVideo_2.mp4", "/htdocs/MyVideo_2.mp4");

// compare the downloaded file with the server
if (await client.CompareFileAsync(@"C:\MyVideo_2.mp4", "/htdocs/MyVideo_2.mp4") == FtpCompareResult.Equal){  }

// delete the file
await client.DeleteFileAsync("/htdocs/MyVideo_2.mp4");

// upload a folder and all its files
await client.UploadDirectoryAsync(@"C:\website\videos\", @"/public_html/videos", FtpFolderSyncMode.Update);

// upload a folder and all its files, and delete extra files on the server
await client.UploadDirectoryAsync(@"C:\website\assets\", @"/public_html/assets", FtpFolderSyncMode.Mirror);

// download a folder and all its files
await client.DownloadDirectoryAsync(@"C:\website\logs\", @"/public_html/logs", FtpFolderSyncMode.Update);

// download a folder and all its files, and delete extra files on disk
await client.DownloadDirectoryAsync(@"C:\website\dailybackup\", @"/public_html/", FtpFolderSyncMode.Mirror);

// delete a folder recursively
await client.DeleteDirectoryAsync("/htdocs/extras/");

// check if a file exists
if (await client.FileExistsAsync("/htdocs/big2.txt")){ }

// check if a folder exists
if (await client.DirectoryExistsAsync("/htdocs/extras/")){ }

// upload a file and retry 3 times before giving up
client.RetryAttempts = 3;
await client.UploadFileAsync(@"C:\MyVideo.mp4", "/htdocs/big.txt", FtpRemoteExists.Overwrite, false, FtpVerify.Retry);

// disconnect! good bye!
await client.DisconnectAsync();
Clone this wiki locally