ali7566
Lieutenant
- Registriert
- Feb. 2007
- Beiträge
- 938
Hallo leute,
ich beschäftige mich gerade mit einer Aufgabe aus dem Studium bei der es darum geht zwei verzeichnisse (Quell und Zielverzeichnis) zu synchronisieren, wenn a) die Datei aus der Quelle ein neueres datum hat als ziel, b) wenn das Datum der Datei aus der Quelle neuer ist als der vom Zielverzeichnis.
Den Code habe ich soweit schon fertig, jedoch bekomme ich noch einige exceptions rausgehauen mit denen ich auch nach langem experementieren zu keiner Lösung kommen konnte.
Ich habe im Prinzip einen Button "Kopieren" der die Synchronisation anstoßt. Wenn die Verzeichnisse synchron sind wird logischweise nichts gemacht.
Hier mal zum Code:
Das Problem ist das es an der Stelle wo ich File.Copy() oder File.Replace() verwende es gehörig knallt.
Warum das so ist weiß ich jedoch nicht, die Exceptions sagen mir nicht viel.
Ich befürchte das auch logische Fehler sich eingeschlischen haben.
edit: Die Exceptions sind bei Copy oder Replace, sind IOExceptions die sagen das die datei nicht überschrieben werden konnte.
Wer kann mir helfen ?
ich beschäftige mich gerade mit einer Aufgabe aus dem Studium bei der es darum geht zwei verzeichnisse (Quell und Zielverzeichnis) zu synchronisieren, wenn a) die Datei aus der Quelle ein neueres datum hat als ziel, b) wenn das Datum der Datei aus der Quelle neuer ist als der vom Zielverzeichnis.
Den Code habe ich soweit schon fertig, jedoch bekomme ich noch einige exceptions rausgehauen mit denen ich auch nach langem experementieren zu keiner Lösung kommen konnte.
Ich habe im Prinzip einen Button "Kopieren" der die Synchronisation anstoßt. Wenn die Verzeichnisse synchron sind wird logischweise nichts gemacht.
Hier mal zum Code:
Code:
//Methode prüft ob es sich um eine Datei oder eine Ordner handelt
public Boolean verzeichOrDatei(string a)
{
if(0 == (File.GetAttributes(a) & FileAttributes.Directory))
{
return true; // true steht für eine Datei
}
else
{
return false; // false steht für einen Ordner
}
}
// wenn es sich um einen Ordner handelt wird dieser mit der Methode erstellt bzw. Kopiert
public void copyDirectory(string quellpfad, string zielpfad)
{
DirectoryInfo qp= new DirectoryInfo(quellpfad);
if(!Directory.Exists(zielpfad))
{
Directory.CreateDirectory(zielpfad);
}
foreach(DirectoryInfo a in qp.GetDirectories())
{
copyDirectory(a.FullName, zielpfad+"\\"+a.FullName);
}
foreach (FileInfo f in qp.GetFiles())
{
f.CopyTo(zielpfad + "\\" + f.Name, true);
}
}
// Die Methode die sich ums Synchronisieren kümmert
private void btnCopy_Click(object sender, EventArgs e)
{
FileInfo dirQ,dirZ; // FileInfo Objekte für Quelle und Ziel
string[] namenQ, namenZ;
DateTime[] zeitDatenQ, zeitDatenZ;
Boolean a;
string [] substring, substring2;
// Informationen von Quelle und Ziel wird an die Arrays übergeben
namenQ = Directory.GetFileSystemEntries(txtQuelle.Text);
namenZ = Directory.GetFileSystemEntries(txtZiel.Text);
zeitDatenQ = new DateTime[namenQ.Length];
zeitDatenZ = new DateTime[namenZ.Length];
for (int i = 0; i < namenQ.Length; i++)
{
dirQ = new FileInfo(namenQ[i]);
dirZ = new FileInfo(namenZ[i]);
// der Zeitpunkt des letztens schreibvorgang wird ermittelt
zeitDatenQ[i] = Directory.GetLastWriteTime(dirQ.DirectoryName);
zeitDatenZ[i] = Directory.GetLastWriteTime(dirZ.DirectoryName);
// es wird gesplittet um die Datei oder Verzeichnisnamen zu erhalten
substring = namenQ[i].Split('\\');
substring2 = namenZ[i].Split('\\');
if (zeitDatenQ[i] > zeitDatenZ[i]) // ob quelle neuer ist als Ziel
{
a = verzeichOrDatei(namenQ[i]); // Methode prüft ob datei oder Verzeichnis
if (a == true) //Datei
{
try
{
// Wenn datei nicht existiert dann kopieren
File.Copy(namenQ[i], namenZ[i]);
}
catch (Exception ex)
{
// wenn datei exisitert wird überschrieben
MessageBox.Show(ex.ToString());
File.Replace(namenQ[i], namenZ[i], "C:\\Users\\ali-g\\Desktop\\sicherung\\"+substring[substring.Length-1]);
}
}
else if (a == false) //Verzeichnis
{
// Bei einem Verzeichnis wird erzeugt oder erstellt
copyDirectory(namenQ[i], namenZ[i]);
}
}
//Es wird geprüft ob der Dateiname von Quelle gleich von Ziel ist
if (substring[substring.Length-1] != substring2[substring2.Length-1])
{
// prüfen ob Verzeichnis oder Datei
a = verzeichOrDatei(namenQ[i]);
if (a == true) // Datei
{
try
{
File.Copy(namenQ[i], namenZ[i]);
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
File.Replace(namenQ[i], namenZ[i], "C:\\Users\\ali-g\\Desktop\\sicherung\\" + substring[substring.Length - 1]);
}
}
else if (a == false) // Verzeichnis
{
copyDirectory(namenQ[i], namenZ[i]);
}
}
}
}
Das Problem ist das es an der Stelle wo ich File.Copy() oder File.Replace() verwende es gehörig knallt.
Warum das so ist weiß ich jedoch nicht, die Exceptions sagen mir nicht viel.
Ich befürchte das auch logische Fehler sich eingeschlischen haben.
edit: Die Exceptions sind bei Copy oder Replace, sind IOExceptions die sagen das die datei nicht überschrieben werden konnte.
Wer kann mir helfen ?
Zuletzt bearbeitet: