我有一些照片在一个文件夹里。图像可以很容易地从第一个文件夹转移到第二个文件夹。到目前为止,一切似乎都是ok的,但是如何将一个图像从第一个目录传递到第二个目录,这与已经存在于第二个文件夹中的图像是相同的呢?简单来说:如何更新或覆盖第二个文件夹中的文件?非常感谢您的帮助!
string pathName = @"C:\Users\Desktop\Images\Second\";
foreach (var file in Directory.EnumerateFiles(@"C:\Users\Desktop\Images\"))
{
if (!Directory.Exists(pathName))
{
Directory.CreateDirectory(pathName);
}
string destFile = Path.Combine(pathName, Path.GetFileName(file));
if (!File.Exists(destFile))
{
File.Move(file, destFile);
}
}
move方法可以具有要重写第三个参数boolean
Move(String, String, Boolean)
将指定的文件移动到新位置,提供指定新文件名和覆盖目标文件(如果目标文件已存在)的选项。检查https://docs.microsoft.com/en-us/dotnet/api/system.io.file.move?view=net-5.0
或者,如果文件存在于destination中,则可以使用File.replace()保存已删除文件的备份。
public static void Replace (string sourceFileName, string destinationFileName, string? destinationBackupFileName);
会是这样的
string pathName = @"C:\Users\Desktop\Images\Second\";
foreach (var file in Directory.EnumerateFiles(@"C:\Users\Desktop\Images\"))
{
if (!Directory.Exists(pathName))
{
Directory.CreateDirectory(pathName);
}
string destFile = Path.Combine(pathName, Path.GetFileName(file));
string backupFile = 'Some place to backup the deleted image'.
if (!File.Exists(destFile))
{
File.Move(file, destFile);
}
else
{
File.Replace(file, destFile, backupFile);
}
}
可以查看https://docs.microsoft.com/en-us/dotnet/api/system.io.file.replace?view=net-5.0查看文档
更新:
我忘了,Move方法有第三个参数bool
overwrite。你可以用它
File.Move(file, destFile, true);
您将在这里找到更多信息
对于此任务,可以使用file.openread
、file.openwrite
和stream.copyto
方法
if (!File.Exists(destFile))
{
File.Move(file, destFile);
}
else
{
using (var sourceStream = File.OpenRead(file))
using (var desStream = File.OpenWrite(destFile))
sourceStream.CopyTo(desStream);
}