提问者:小点点

更新特定目录中的图像文件


我有一些照片在一个文件夹里。图像可以很容易地从第一个文件夹转移到第二个文件夹。到目前为止,一切似乎都是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);
                                
   }

}






共2个答案

匿名用户

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方法有第三个参数booloverwrite。你可以用它

 File.Move(file, destFile, true);

您将在这里找到更多信息

对于此任务,可以使用file.openreadfile.openwritestream.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);
}