C# - Dateien kopieren per File.Copy()


Alexander12

Erfahrenes Mitglied
Hallo,

Habe mal ein kleines Programm geschrieben, welches Dateien kopieren soll.

Code:
void COPY_Click(object sender, System.EventArgs e)
{
		
        string path = Convert.ToString(textBox.Text);
        string path2 = Convert.ToString(textBox2.Text);
        try 
        {
            

            //Kopieren der Datei.

            File.Copy(path, path2);
            this.textBox3.Text =  "{0} wurde kopiert nach {1}.", path, path2;

        } 
        catch 
        {
            
        }
}
Nun mein Problem: Wenn ich Dateien mit dem Programm kopiere, z.B. Textdateien ist die Kopie im Zielverzeichnis aber leer, im eigentlichen Textdokumkent befindet sich aber Text. Auch wenn ich z.B. eine Anwendung (Setup.exe) kopiere und die Kopie im Zielverzeichnis ausführe, sagt mir 'ne Fehlermeldung, dass es keine gültige Win32 Anwendung wäre oder so was. Also er kopiert immer nur die Datei, aber nicht den Inhalt. :(

Kann mir jemand helfen? Für Code wäre ich sehr Dankbar! :)

Danke schon mal im Vorraus!

MfG. Alexander12
 

NRFi

Erfahrenes Mitglied
VS 2005 Beta2:

System.IO.File.Copy("C:\\test.png", "C:\\testcopy.png");

geht.

Evtl ist der Name der SourceFile falsch?
 

NRFi

Erfahrenes Mitglied
Achja sorry sehe gerade deinen leeren Try-Catch-Block :D

Also ich machs immer so, dass ich erst meine Funktion fertige schreibe und teste, bevor ich einen Catch-Block rumsetze. Natürlich kann ich es auch gleich machen und dann einen evtl. Fehler über eine MessageBox ausgeben, aber ich mach es halt erst immer am schluss mit vernünftigem Loggingsystem. Wie dem auch sei;

Du hast da irgendwo einen Fehler in deiner Zeile, evtl. keine Zugriffsrechte im Zielverzeichnis, Quell-Datei nicht vorhanden, etc.

Also machst du jetzt, um zu gucken was los ist, den try-catch-Block raus, oder du sagst am Ende:

Code:
catch (Exception ex)
{
        MessageBox.Show(ex.Message);
}
Dann weißt du auch, was los ist ;)

Gruß, NRF
 

Nico Graichen

aka gemballa
Hi,
1. Könntest du bitte noch die Lösung für dein Problem posten? Es ist nämlich noch nicht so ganz klar, an was es nun lag.
und 2.
Code:
string path = Convert.ToString(textBox.Text);
string path2 = Convert.ToString(textBox2.Text);
Wieso konvertierst du den Wert von Ctrl.Text noch in einen String? Der Text-Member ist doch schon ein String. ;)
 

Alexander12

Erfahrenes Mitglied
Hy niggo,

1.)Die Lösung des Problems war:

Code:
void COPY_Click(object sender, System.EventArgs e)
{
		
        string path = Convert.ToString(textBox.Text);       //Pfad wo sich die Datei befindet
        string path2 = Convert.ToString(textBox2.Text);   //Pfad wo die Datei hin soll
        try 
        {
            
            //Kopieren der Datei.
            System.IO.File.Copy(path, path2);
            MessageBox.Show("Kopieren erfolgreich!");
        } 
        catch 
        {
            MessageBox.Show("Kopieren fehlgeschlagen!");
        }
}
Natürlich hab' ich oben noch

Code:
using System.IO;
eingebunden!

2.)In die TextBoxen sollte die im Code beschriebenen Pfade eingeben. Diese werden dann in 'nen String konvertiert für das System.IO.File.Copy(path, path2). Soll ja nicht jedes Mal die gleiche Datei kopiert werden. ;)

Gruß Alexander12
 

Alexander12

Erfahrenes Mitglied
Hab' noch Mal 'ne Frage:

Kann ich da eigentlich auch noch 'ne ProgressBar in mein Form machen, dass den Fortschritt anzeigt, weil bei großen Dateien bleibt das Form hängen ... :(
Kann man die Datei z.B. in 2 MB große Stücke teilen, die das Programm nacheinander kopiert un dann im Zielordner wieder zusammensetzt?
Hab' auch schon was von Threading gehört und auch schon im Forum gesucht, habe aber nichts gefunden. :confused:

Hat jemand ein paar Codefetzen, die mir helfen könnten? ;)

MfG Alexander12
 

Christian Kusmanow

Erfahrenes Mitglied
ProgressBar? Thread?
Ok, hätt ich ne sehr gute Idee. Mach aber bitte einen neuen Thread dafür auf. ;)
Hab jetzt aber Feierabend. Antworte dann Montag oder WE wenn ich kann. :)

MfG, cosmo
 

Nico Graichen

aka gemballa
Alexander12 hat gesagt.:
...
2.)In die TextBoxen sollte die im Code beschriebenen Pfade eingeben. Diese werden dann in 'nen String konvertiert für das System.IO.File.Copy(path, path2). Soll ja nicht jedes Mal die gleiche Datei kopiert werden. ;)
...
Ja, mag ja sein, dass du nicht immer di selbe Datei kopieren willst, das spielt ja keine Rolle. Ich wollte wissen, warum du Textbox.Text nochmal als String Konvertierst. Wie bereits erwähnt, ist Text bereits ein String.
Also:
Code:
...
File.Copy(textbox1.Text, textbox2.Text);
...
reicht vollkommen aus.
Die zusätzliche Konvertierung von String in String, ist 1. zienlich unnötig und 2. kann sowas ziemlichen Overhead erzeugen. Wenn du das immer machst, kann es vorallem in großen Projekten, in denen es auch auf Performance ankommt, einige Einbußen verursachen.
Für ein kleines Programm wie dieses, ist es halb so wild, es war mir nur aufgefallen, dass du aus Brot Brot machst ;)
 

Alexander12

Erfahrenes Mitglied
Hi niggo,

Danke für die Info! Bin wohl auf dem Schlauch gestanden ...
Hätt ich auch selber drauf kommen können ... :(

MfG Alexander12