如果目标不存在,则使用“|| !destFile.Exists”可以更清晰地阅读代码。从技术上讲,为不存在的文件创建文件信息将具有 DateTime.Min 的 LastWriteTime,因此它会复制但在可读性方面有点不足。更强大的错误处理程序将是理想的,但这是另一个主题。 :) 我希望这个经过测试的代码对某人有所帮助。
复制文件,如 xcopy source target /d
CopyFolderContents(sourceFolder, destinationFolder);
复制文件,如 xcopy source target /d /s
CopyFolderContents(sourceFolder, destinationFolder, "*.*", true, true);
使用可选掩码复制上述任何文件
CopyFolderContents(sourceFolder, destinationFolder, "*.png", true, true);
将所有文件从源文件夹和子文件夹复制到目标文件夹
CopyFolderContents(sourceFolder, destinationFolder, "*.*", false, true);
为了您的方便,这里的问题是带有重载的代码。
public void CopyFolderContents(string sourceFolder, string destinationFolder)
{
CopyFolderContents(sourceFolder, destinationFolder, "*.*", false, false);
}
public void CopyFolderContents(string sourceFolder, string destinationFolder, string mask)
{
CopyFolderContents(sourceFolder, destinationFolder, mask, false, false);
}
public void CopyFolderContents(string sourceFolder, string destinationFolder, string mask, Boolean createFolders, Boolean recurseFolders)
{
try
{
if (!sourceFolder.EndsWith(@"\")){ sourceFolder += @"\"; }
if (!destinationFolder.EndsWith(@"\")){ destinationFolder += @"\"; }
var exDir = sourceFolder;
var dir = new DirectoryInfo(exDir);
SearchOption so = (recurseFolders ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly);
foreach (string sourceFile in Directory.GetFiles(dir.ToString(), mask, so))
{
FileInfo srcFile = new FileInfo(sourceFile);
string srcFileName = srcFile.Name;
// Create a destination that matches the source structure
FileInfo destFile = new FileInfo(destinationFolder + srcFile.FullName.Replace(sourceFolder, ""));
if (!Directory.Exists(destFile.DirectoryName ) && createFolders)
{
Directory.CreateDirectory(destFile.DirectoryName);
}
if (srcFile.LastWriteTime > destFile.LastWriteTime || !destFile.Exists)
{
File.Copy(srcFile.FullName, destFile.FullName, true);
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message + Environment.NewLine + Environment.NewLine + ex.StackTrace);
}
}