在 C#.NET 中,如何将文件复制到另一个位置,如果源文件比现有文件新(具有较晚的“修改日期”)覆盖现有文件,并注意源文件是否较旧?
问问题
34152 次
4 回答
42
您可以使用FileInfo
该类 及其属性和方法:
FileInfo file = new FileInfo(path);
string destDir = @"C:\SomeDirectory";
FileInfo destFile = new FileInfo(Path.Combine(destDir, file.Name));
if (destFile.Exists)
{
if (file.LastWriteTime > destFile.LastWriteTime)
{
// now you can safely overwrite it
file.CopyTo(destFile.FullName, true);
}
}
于 2012-12-27T10:02:41.433 回答
9
您可以使用 FileInfo 类:
FileInfo infoOld = new FileInfo("C:\\old.txt");
FileInfo infoNew = new FileInfo("C:\\new.txt");
if (infoNew.LastWriteTime > infoOld.LastWriteTime)
{
File.Copy(source path,destination path, true) ;
}
于 2012-12-27T10:02:24.763 回答
2
这是我对答案的看法:复制不移动文件夹内容。如果目标不存在,则代码更易于阅读。从技术上讲,为不存在的文件创建文件信息将具有 DateTime.Min 的 LastWriteTime,因此它会复制但在可读性方面有点不足。我希望这个经过测试的代码可以帮助某人。
**编辑:我已经更新了我的源代码,使其更加灵活。因为它是基于这个线程的,所以我在这里发布了更新。使用掩码时,如果子文件夹不包含匹配的文件,则不会创建子目录。当然,更强大的错误处理程序在您的未来。:)
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);
}
}
于 2014-03-02T22:50:18.173 回答
0
在批处理文件中,这将起作用:
XCopy "c:\my directory\source.ext" "c:\my other directory\dest.ext" /d
于 2012-12-27T10:05:01.427 回答