2016-05-04 10 views
0

Ich versuche, alle PDF-Dateien (PDF) aus dem Quellordner an das Ziel zu kopieren. Ich habe es mit einer foreach-Schleife geschrieben. Aber ich möchte es ohne oder für irgendeine Schleife machen. Wenn es eine Option dafür gibt, wie geht das? bitte helft mir ..Kopieren Sie alle PDF-Dateien von einem Pfad zu einem anderen ohne Schleife in C#

My-Code

string sourcePath = @"D:\DataArchiveTest\From"; 
    string targetPath = @"D:\DataArchiveTest\To"; 
    foreach (var sourceFilePath in Directory.GetFiles(sourcePath)) 
    { 
      string fileName = Path.GetFileName(sourceFilePath); 
      string destinationFilePath = Path.Combine(targetPath, fileName); 
      if (fileName.ToUpper().Contains(".PDF")) 
      { 
       System.IO.File.Copy(sourceFilePath, destinationFilePath, true); 
      } 
    } 
+1

Kann ich fragen * warum *? – Steve

+0

Mögliches Duplikat von [Der beste Weg, um den gesamten Inhalt eines Verzeichnisses in C# zu kopieren] (http://stackoverflow.com/questions/58744/best-way-to-copy-the-entire-contents-of-a-directory) -in-c-sharp) – Mostafiz

+0

Tatsächlich kann der sourceFolder Tausende von Dateien enthalten. Wenn wir for-Schleife verwenden, dann beeinflusst es die Leistung in meiner Anwendung –

Antwort

0

Sie etwas tun können:

string sourcePath = @"D:\DataArchiveTest\From"; 
string targetPath = @"D:\DataArchiveTest\To"; 

var dir = new DirectoryInfo(sourcePath); 
FileInfo[] files = dir.GetFiles("*.pdf"); 

foreach (var item in files) 
{ 
    File.Copy(item.FullName, Path.Combine(targetPath, item.Name), true); // overwrite = true 
} 
0

Da Sie in den Kommentaren erwähnt, hat Quellverzeichnis viele Dateien und Sie möchten begrenzen dies zu Pdf Dateien allein (um Leistung zu gewinnen), könnten Sie eine überladene Directory.GetFiles verwenden können Sie angeben, Suchmuster.

Directory.GetFiles(sourcePath, "*.pdf"); 

Jetzt können wir Sie vereinfachen Ihren Code

string sourcePath = @"D:\DataArchiveTest\From"; 
string targetPath = @"D:\DataArchiveTest\To"; 
foreach (var sourceFilePath in Directory.GetFiles(sourcePath, "*.pdf")) 
{ 
     string fileName = Path.GetFileName(sourceFilePath); 
     string destinationFilePath = Path.Combine(targetPath, fileName); 
     System.IO.File.Copy(sourceFilePath, destinationFilePath, true); 
} 
+0

Aber ich möchte keine foreach-Schleife verwenden. Vielleicht können wir parallel jede Schleife benutzen? –

+0

Das könnten wir machen, das ist eine großartige Idee. –

0

ich so etwas tun würde:

string target = @"D:\DataArchiveTest\To\"; 
string source = @"D:\DataArchiveTest\From\"; 

string[] files = Directory.GetFiles(source, ".*pdf", SearchOption.AllDirectories); 

foreach (string item in files) 
{ 
    //Add try - catch 
    File.Copy(item, target + item.Replace(source, ""),true); 
} 

Stellen Sie sicher, dass am Ende des Quellpfads ein '\' steht

Verwandte Themen