2014-04-22 166 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

相关问题