1
  1. 我在一个大文件夹中有 1,000 个唯一命名的文件夹。

  2. 在每个唯一命名的文件夹中,这些是另一个名为 /images 的文件夹。

  3. 每个图像文件夹内都有一个名为"Read-Web-Site-Design-{UNIQUEFOLDERNAME}-ca-logo.png"

  4. 我想从我提供.png的文件中替换 1,768 个文件(同时保留原始名称) 。.png

文件夹结构和文件名需要保持不变。基本上我用一个新文件更新旧文件,使用相同的(唯一的)名称,1000 次。

我已经编写了这段代码,并且可以循环获取所有文件和目录,但我想知道如何在此处更新文件,请检查我的代码:

private List<String> DirSearch(string sDir)
{
List<String> files = new List<String>();
try
{
    foreach (string f in Directory.GetFiles(sDir))
    {
        files.Add(f);

    }
    foreach (string d in Directory.GetDirectories(sDir))
    {
        files.AddRange(DirSearch(d));
    }
}
catch (System.Exception excpt)
{
    //MessageBox.Show(excpt.Message);
}

return files;
}
4

2 回答 2

4

只需执行 aFile.Copy()即可将旧文件替换为您提供的新 .png 文件。

假设您将在列表中替换所有文件,

  List<String> files = new List<String>();

    foreach (var file in files)
    {
        if (!string.IsNullOrWhiteSpace(file))
        {
            File.Copy("New File Path", "file to be replaced", true);
        }
    }

看,您将true作为 Copy() 方法的第三个参数传递,如果目标路径中已有文件,则将覆盖该参数。

或者你可以使用File.Replace(). 在这里您可以保留原始文件作为备份。

File.Replace("New File", "File to be replaced", "Back up of Original File");
于 2013-07-20T10:56:47.540 回答
1

您可能希望考虑以下内容,它将为您处理递归,仅查找文件路径中具有“Read-Web-Site”的 png 文件

foreach(var file in Directory.EnumerateFiles(dir, "*.png", SearchOption.AllDirectories)
                           .Where(x => x.Contains("Read-Web-Site")))
{
 File.Copy(file, Path.Combine(new FileInfo(file).DirectoryName,"newName.png"), true);
}

如果您希望将其覆盖到该文件的另一个文件,那么它是相同的,但

File.Copy("newFile", file, true);

编辑

甚至更好

foreach(var file in Directory.EnumerateFiles(dir, 
    "Read-Web-Site*.png",
     SearchOption.AllDirectories))
于 2013-07-20T11:27:12.697 回答