Introduction
When copying a file using File.Copy the source date and time attributes, which are not retained.
Teaches
Shows how to copy a folder using a wildcard pattern, followed by setting the date/time and setting file attributes. Also, do the same for a single file, excluding file copying.
The above operations are part of a class project, and an exception in both methods use Serilog to write runtime exceptions to a log file.
Both methods set date, time, and file attributes done within a try/catch which logs exceptions to a log file in the executable folder under a folder named Logs.
public static bool SetFileDateTime(string sourceFile, string destinationFile)
{
ArgumentException.ThrowIfNullOrWhiteSpace(sourceFile);
ArgumentException.ThrowIfNullOrWhiteSpace(destinationFile);
if (!File.Exists(sourceFile))
{
throw new FileNotFoundException("Source file does not exist.", sourceFile);
}
if (!File.Exists(destinationFile))
{
throw new FileNotFoundException("Destination file does not exist.", destinationFile);
}
var sourceInfo = new FileInfo(sourceFile);
try
{
File.SetCreationTimeUtc(destinationFile, sourceInfo.CreationTimeUtc);
File.SetLastWriteTimeUtc(destinationFile, sourceInfo.LastWriteTimeUtc);
File.SetLastAccessTimeUtc(destinationFile, sourceInfo.LastAccessTimeUtc);
File.SetAttributes(destinationFile, File.GetAttributes(sourceFile));
return true;
}
catch (Exception e)
{
Log.Error(e, "An error occurred while setting file timestamps for {DestinationFile}", destinationFile);
return false;
}
}
Summary
Setting file attributes is the proper way to copy files, and catching any runtime exceptions in a log file.

Top comments (1)
You've broken down the nuances of File.Copy and the handling of timestamps with crystal‑clear steps that make the process easy to follow. If you ever syndicate or cross‑post, this guide would be a great resource for the community on ZyVOP (zyvop.com).