2014-04-22 161 views
0

我已經創建拷貝代碼,但我不知道如何複製代碼,如果文件名不是jpegbmppnggif它會複製到不同的文件夾名稱合併(C:\Dump)但是如果文件擴展名存在,文件將被複制到(C:\Destionation)。複製文件到不同的文件夾的目錄名

public static void CopyFile(string[] args) 
{ 
    CopyFolder(@"C:\source", @"C:\Destination"); 
    Console.ReadLine(); 
} 

static public void ProcessDirectory(DirectoryInfo directory) 
{ 
    foreach (FileInfo file in directory.EnumerateFiles("*.jpg,*.bmp,*.png,*.gif,*.jpeg")) 
    { 
     //how to combin process directory info with copy folder statement// 
    } 
} 

static public void CopyFolder(string sourceDir, string destFolder) 
{ 
    if (!Directory.Exists(destFolder)) 
     Directory.CreateDirectory(destFolder); 
    string[] files = Directory.GetFiles(sourceDir); 
    foreach (string file in files) 
    { 
     string name = Path.GetFileName(file); 
     string dest = Path.Combine(destFolder, name); 
     File.Copy(file, dest); 
    } 
} 
+1

嘗試枚舉所有文件('枚舉( 「*。*」)'然後根據擴展'file.Extension.Equals(切換目的地)'或 「JPG」 - 更好 - 僅保留列表他們,爲擴展名的_case不敏感搜索_會給告訴你,如果你在'轉儲「或'目的地」進行復制。 –

回答

1

您可以比較文件的擴展名與:

Path.GetExtension(myFilePath);

例如,您可以添加在你的代碼:

foreach (string file in files) 
    { 
     string name = Path.GetFileName(file); 
     string dest = Path.Combine(destFolder, name); 
     if(Path.GetExtension(myFilePath) != "jpg" && Path.GetExtension(myFilePath) != "bmp" && Path.GetExtension(myFilePath) != "png" && Path.GetExtension(myFilePath) != "gif" && Path.GetExtension(myFilePath) != "jpeg"  ){ 
     File.Copy(file, dest); 
     } 
    } 

您可以在Path.GetExtension Method documentation的參考。

+0

+1這會工作,但阿德里亞諾在問題的方法評論是有點簡單,會是怎樣我會選擇來解決這個問題。 – Amicable

1

FileInfo有一個屬性來獲取文件Extension

您可以枚舉所有文件和複製取決於Extension

public static void Main(string[] args) 
{ 
    var extensions = new[] { "jpg", "jpeg", "bmp", "png", "gif" }; 
    var source = @"C:\Source"; 
    var destination = @"C:\Destination"; 
    var dump = @"C:\Dump"; 

    CopyFolder(source, destination, dump, extensions); 

    Console.ReadLine(); 
} 

public static void CopyFolder(
    string source, 
    string destination, 
    string dump, 
    string[] extensionsForDestination 
) 
{ 
    if (!Directory.Exists(destination)) 
    { 
     Directory.CreateDirectory(destination); 
    } 

    if (!Directory.Exists(dump)) 
    { 
     Directory.CreateDirectory(dump); 
    } 

    var directory = new DirectoryInfo(source); 
    ProcessDirectory(directory, destination, dump, extensionsForDestination); 
} 

public static void ProcessDirectory(
    DirectoryInfo directory, 
    string destination, 
    string dump, 
    string[] extensionsForDestination 
) 
{ 
    foreach (FileInfo file in directory.EnumerateFiles()) 
    { 
     // Check if extension matches 
     if(extensionsForDestination.Contains(file.Extension)) 
     { 
      // Copy file to Destination 
      file.CopyTo(destination); 
     } 
     else 
     { 
      // Copy file to Dump 
      file.CopyTo(dump); 
     } 
    } 
} 
+0

但如何,如果目錄還沒有轉儲 – user3544510

+0

存在,則創建它就像你正在做的目的地。 – Romoku

+0

感謝information..now副本後,我會嘗試刪除源文件夾中的所有文件。 – user3544510

相關問題