2013-07-21 2 views
0
  1. У меня есть 800-1000 уникально названных папок в одной большой папке.необходимо обновить файл изображения в C#

  2. Внутри каждой папки с уникальным именем находится другая папка, называемая/изображения.

  3. И внутри каждой папки изображения является файл с именем "Rock-Star-Site-Дизайн- {UNIQUEFOLDERNAME} -ca-logo.png"

  4. Я пишу код, который заменяет все .png файлы (сохраняя исходное имя) из файла .png, который я поставляю.

Структура папок и имена файлов должны оставаться неизменными. В основном я обновляю старый файл с новым файлом, используя то же (уникальное) имя, 800-1000 раз.

Код, который я испробовал правильно, но есть одна ошибка. Внутри папки с изображениями много изображений. Но мне нужно обновить только «Rock-Star-Site-Design-{UNIQUEFOLDERNAME} -ca-logo.png msgstr "записать каждую папку.

есть ли способ, чтобы я мог получить файл.startwith («Rock-Star»). Поэтому я могу обновить конкретный файл, который я хочу.

Вот мой код:

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)); 
     } 


     foreach (var file in files) 
     { 
      if (!string.IsNullOrWhiteSpace(file)) 
      { 
       File.Copy(Server.MapPath("ca-logo.jpg"), file,true); 

      } 
     } 


    } 
    catch (System.Exception excpt) 
    { 
     //MessageBox.Show(excpt.Message); 
    } 

    return files; 
} 

ответ

0

Сначала получите имя файла из полного пути файла, используя Path.GetFileName(). Затем используйте StartsWith(). Когда вы добавляете файлы в список, проверьте, начинается ли имя файла с нужным именем, а затем добавляется в список.

List<String> files = new List<String>(); 
foreach (string f in Directory.GetFiles("")) 
{ 
    //Get file name from full file path 
    string fileName = Path.GetFileName(f); 

    //Get only the files starts with Rock-Star 
    if (fileName.StartsWith("Rock-Star")) 
     { 
      files.Add(f); 
     } 

} 

EDIT

Если вы хотите обновить файлы как с верхним и нижним регистром lettes, то вы должны пройти StringComparison.OrdinalIgnoreCase перечисления в ваш метод StartsWith()

//Get only the files starts with Rock-Star or rock-start 
    if (fileName.StartsWith("Rock-Star",StringComparison.OrdinalIgnoreCase)) 
     { 
     files.Add(f); 
     } 

EDIT

Чтобы получить файлы в пределах ll и замените, перейдите SearchOption.AllDirectories в метод GetFiles(). После код будут искать все вложенные папки для файлов с расширением .png

foreach (string f in Directory.GetFiles(sDir, "*.png", SearchOption.AllDirectories)) 
+0

У меня есть 2 изображения, как рок-звезда и рок-звезда ... но я хочу, чтобы обновить Rock-Star .... так что я должен необходимо сделать для чувствительности к регистру. – sikha

+0

Тот же код должен работать, над кодом будет только обновлять файл с именем верхнего регистра «Rock - Start». Он не заменит «рок-звезда» – Kurubaran

+0

Смотрите обновленный код. Надеюсь, поможет. – Kurubaran

4

Вы можете использовать это, чтобы получить файлы на основе регулярного выражения

Directory.GetFiles(sDir, "Rock-Star*.png"); 

Rock-Star * .png означает файлы, начиная с Rock-Star, * означает любой символ или последовательность символов, заканчивающийся на .png

Смежные вопросы