Hiho,
Auf die Gefahr hin das ich die Frage wiederholt stelle....Finde die net so wirklich....
Ähm, bin erstma Newbe was C# anbelangt. Kleine Vorwahnung 😁
Ich möchte einen Ordner von einem Pc auf einen Server kopieren.
Packen lohnt sich net so wirklich sind keine großen Ordner die kopiert werden sollen.
Nun aber zu meinem Problem:
Ich hab absolut keine Ahnung wie ich das machen soll. 8o
Weiß nur, mit dem Directory.Move kann ich nichts anfangen weil die Ordner auf dem PC erhalten bleiben sollen. 🙁
Habt Ihr da ein Tutorial bzw ein Codeschnipsel , wenn möglich mit Erklärungen was wo passiert, wo ich spicken kann?
Wäre supper weil brauch das wirklich dringend. Muss damit spätestens in einer Woche fertig sein..... X(
darkgreetz
Cine
Hallo CinemaStrange,
bist du dir sicher, dass du das extra programmieren musst. Immerhin gibt es ja 'xcopy /s <quelle> <ziel>'.
Wenn du es wirklich in C# programmieren willst, musst du das vermutlich komplett ausprogrammieren. Mit Directory.GetFiles die Dateinamen holen, den Ziel-Pfad berechen, mit File.Copy die Dateien einzeln kopieren und mit Directory.GetDirectories rekursiv absteigen.
HTH
herbivore
Wollen tu ich es nicht. Ich muss. Cheffe will es als klickibunti haben. 😁
Hast du vielleicht ein paar Links oder sowas mit einem Beispiel wo man des Schritt per Schritt durchgeht?
darkgreetz
Cine
Hallo CinemaStrange,
nicht schlagen, wenn ich einen Link zu VB-Code poste. Aber es sieht so aus, als wäre es genau, was du brauchst:
HTH
herbivore
PS: In meiner Auflistung oben, habe ich vergessen, dass man die Zielverzeichnisse noch selbst anlegen muss (Directory.CreateDirectory).
Warum sollt ich dich schlagen?
Zum Lernen ist das doch egal in welcher Sprache.
Hauptsache ich kapier, wie sowas geht. Das Umsetzten dürfte dann eigetlich net so das Schwirige sein, hoffe ich zu mindest 😄.
Und welche Sprache ist in meinen Augen eh Geschmackssache. Könnte man lange drüber diskutieren.
Thx aber erstmal für die Hilfe.
Hoffe, wenn ich auf Probleme stoße, dass ich mich dann wieder bei dir melden kann.
Werd ma gucken ob ich damit was anfangen kann 😉
Melde mich auch wenn ich es geschafft habe.
darkgreetz
Cine
Aber bitte Pfade nicht wie in diesem VB.NET-Beispiel mit Stringfunktionen zusammenbasteln, sondern das explizit hierfür gedachte Path.Combine() einsetzen. Wenn ich diese ganzen LastIndexOf() und und Substring() sehe, kriege ich 'ne Krise...
Öhm, auch wenn ich nerve, aber hasst du denn da mal ein Codeschnippsel ohne diese Zeugs? und mit den Funktionen die du meinst?
Währe hilfreich für mich....
darkgreetz
Cine
Einfaches Beispiel: Du hast den absoluten Pfad eines Verzeichnisses und den Namen eines Unterverzeichnisses. Diese möchtest du nun zum vollständigen Pfad zusammensetzen. Geht ganz einfach:
string basePath = @"D:/Daten/Downloads";
string subDir = "Videos";
string fullPath = Path.Combine(basePath, subDir);
// Ausgabe: D:/Daten/Downloads/Videos
Console.WriteLine("Vollstaendiger Pfad: {0}", fullPath);
PS: Die Boardsoftware schnippelt anscheinend Backslashes heraus! 😦 Daher habe ich oben als Pfadtrennzeichen das normale "/" verwendet.
Hallo bitstream,
Die Boardsoftware schnippelt anscheinend Backslashes heraus!
das ist mir auch schon störend aufgefallen, aber zumindest kann man das Problem durch Verdoppelung der Backslashes umgehen.
herbivore
Hm, thx.
Also bin jetzt soweit, dass ich die Ordner der ersten Ebene erstellen kann aber noch ohne die Inhalte.
Falls es euch interessiert habe das so gelöst:
string [] dirs = Directory.GetDirectories(quelle);
Directory.CreateDirectory(ziel);
foreach (string dir in dirs)
{
int y = dir.LastIndexOf("\\");
string tmp = dir.Substring(y+1);
string zw = ziel + "\\" + tmp;
Directory.CreateDirectory(zw);
}
Glaub des ist der Lösungsansatz d en du net sehen wolltes oder?
Wie gesagt ausgereift ist des noch lang net aber so hab ich wenigstens was ind er Hand was ich Cheffe abgeben kann.
darkgreetz
Cine
Hallo CinemaStrange,
ich denke was bitstream meinte ist folgendes:
string zw = Path.Combine(ziel, tmp);
statt
string zw = ziel + "\\" + tmp;
HTH
herbivore
Hab ich grade probiert Funktioniert auch.
Sieht schon mal eleganter aus 😁
Hab jetzt bloß das Problem das ich wie gesagt die Ordner der ersten Ebene schon rüber bekomme nur jetzt hänge ich an den Files die wollen net so wie ich das will....
Das betraf jetzt aber nur die eine Zeile oder? mit dem Combine oder kann man sich damit noch mehr Summs eresparen?
darkgreetz
Cine
Hab mal ein kleines Prog geschrieben, dass die Zeilen von *.cs Quellcodedateien zählt:
Es sollte ganz gut demonstrieren, wie man Verzeichnisste rekursiv durchsucht.
Hier der Auszug:
private void bCount_Click(object sender, System.EventArgs e)
{
int lines = 0;
int files = 0;
CountLOC( new DirectoryInfo(tbFolder.Text), ref lines, ref files );
tbLOC.Text = lines.ToString();
tbFiles.Text = files.ToString();
}
private void bBrowse_Click(object sender, System.EventArgs e)
{
if( folderBrowserDialog.ShowDialog() == DialogResult.OK )
{
tbFolder.Text = folderBrowserDialog.SelectedPath;
}
}
private void CountLOC( DirectoryInfo di, ref int lines, ref int files )
{
FileInfo[] fs = di.GetFiles( "*.cs" );
foreach( FileInfo f in fs )
{
CountLOC( f, ref lines );
files++;
}
DirectoryInfo[] dirs = di.GetDirectories();
foreach( DirectoryInfo d in dirs )
{
CountLOC( d, ref lines, ref files );
}
}
private void CountLOC( FileInfo fi, ref int lines )
{
StreamReader sr = fi.OpenText();
string l;
while (sr.Peek() >= 0)
{
sr.ReadLine();
lines++;
}
sr.Close();
}
Du müsstest dann nur noch die CountLOC Methode, welche die Zeilen zählt, durch eine Kopierrountine ersetzen.
I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.
Ich hab so was ähnliches gemacht: Backup auf Server.
Weil ich eine Progressbar wollte, hab ich die Shell-Funktion SHFileOperation(shell32) verwendet.
Damit kann man sich auch die rekursive Verzeichnissuche sparen.
Servas,
Meli
Gernot Melichar
SHFileOperation per PInvoke könnte man nehmen, dafür verspielt man sich aber jede Form von Portabilität.
I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.
Für alle die es interessiert hab ich hie mal meine Lösung ......
public static void filework(string source, string destination)
{
// Ordner durchgehen
foreach (string folder in Directory.GetDirectories(source))
{
// Ordnername extrahieren
int index = folder.LastIndexOf("\\");
string cop = folder.Substring(index+1);
Directory.CreateDirectory(destination + "\\" + cop);
// rekursiver aufruf
filework(folder,destination + "\\" + cop);
}
// Dateien durchgehen
foreach (string filename in Directory.GetFiles(source))
{
int index = filename.LastIndexOf("\\");
string cop = filename.Substring(index+1);
if (File.Exists(destination + "\\" + cop))
{
File.Delete(destination + "\\" + cop);
File.Copy(filename,destination + "\\" + cop);
}
else
{
File.Copy(filename,destination + "\\" + cop);
}
}
}
darkgreetz
Cine