使用新文件更新文件

时间:2013-07-20 10:48:25

标签: c# asp.net vb.net c#-4.0

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

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

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

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

  7. 文件夹结构和文件名需要保持不变。基本上我用新文件更新旧文件,使用相同(唯一)的名称,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;
    }
    

2 个答案:

答案 0 :(得分:4)

您只需要执行File.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()方法的第3个参数,如果目标路径中已有文件,则覆盖该文件。

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

File.Replace("New File", "File to be replaced", "Back up of Original File");

答案 1 :(得分: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))