2016-05-11 9 views
1

In meiner App muss ich komplette XDCam Disks (Prof. Broadcast Record Disk) auf unseren Fileserver kopieren. Die folgende Funktion scheint jedoch nur zu funktionieren, wenn das Quelllaufwerk kein Stammverzeichnis ist.C# Komplette Removeable Disk in freigegebenen Ordner kopieren

arbeiten nicht

FileSystem.CopyDirectory("E:\\", serverPath + this.targtetDirectory + "\\", UIOption.AllDialogs); 

Arbeiten

FileSystem.CopyDirectory("E:\\Clip\\", serverPath + this.targtetDirectory + "\\", UIOption.AllDialogs); 

Wie kann ich die gesamte Festplatte zu meinem Zielverzeichnis kopieren?

+0

für alle Dateien und Verzeichnisse Dateien kopieren und das Dateisyste.copydirectory für Verzeichnisse erstellen? – BugFinder

+1

Was macht es, wenn es "nicht funktioniert"? Gibt es einen Fehler? Tut es überhaupt nichts und setzt mit dem nächsten Code fort? –

+0

Dies kann ein Berechtigungsproblem sein - brauchen Sie ** ** um von der Wurzel kopieren zu können? – Bassie

Antwort

1

Dies ist, wie ich es in der Vergangenheit getan haben:

void CopyAppFiles(string SourcePath, string) 
{ 
    foreach (string dirPath in Directory.GetDirectories(SourcePath, "*", SearchOption.AllDirectories)) 
    { 
     Directory.CreateDirectory(dirPath.Replace(SourcePath, DestinationPath)); 
    } 

    foreach (string newPath in Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories)) 
    { 
     File.Copy(newPath, newPath.Replace(SourcePath, DestinationPath), true); 
    } 
} 

Mit dem Fortschritt Sie so etwas wie

void CopyAppFiles(string SourcePath, string) 
{ 
    string[] dirs = Directory.GetDirectories(SourcePath, "*", SearchOption.AllDirectories); 
    string[] files = Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories) 

    int totalOperations = dirs.length + files.length; 

    for(int i = 0; i < dirs.length; i++) 
    { 
     Directory.CreateDirectory(dirs[i].Replace(SourcePath, DestinationPath)); 

     ReportProgress(i, totalOperations); 
    } 

    for(int i = 0; i < files.length; i++) 
    { 
     File.Copy(files[i], files[i].Replace(SourcePath, DestinationPath), true); 

     ReportProgress(i + dirs.length, totalOperations); 
    } 
} 

void ReportProgress(int currentOperation, int totalOperations) 
{ 
    //TODO 
} 

funktioniert am besten mit kleinen Dateien

+0

Das funktioniert gut. Einzige Sache ist, dass ich keine Fortschrittsbalken mehr habe. Das wird das nächste sein, was zu implementieren ist. Ich brauche eine Fortschrittsleiste, weil ältere XDCam-Laufwerke nur USB 2.0 sind und die Festplatte bis zu 50 GB enthalten kann. Also brauche ich etwas, um den Kopiervorgang zu überwachen. Vielen Dank! –

+0

Wow - vielen Dank! –

0

Statt gezielt das Root-Verzeichnis tun könnte Versuchen Sie, alle Unterverzeichnisse des Stammverzeichnisses abzurufen und sie einzeln zu kopieren:

string destinationDir = serverPath + this.targetDirectory + @"\"; 
foreach (var file in Directory.GetFiles(@"E:\", "*.*", System.IO.SearchOption.AllDirectories)) 
{ 
    File.Copy(file, destinationDir + file.Substring(targetDirectory.Length)); 
} 
+0

File.Copy (Datei, destinationDir + file.Substring (targetDirectory.Length)); Dies verursacht ArgumentOutOfRange Exception :( –