C#, Ein Teil des Pfades konnte nicht gefunden werden?
Guten Tag,
Mein Programm soll eine Datei auf den Desktop kopieren, umbenennen und dann starten, dazu habe ich folgenden Code:
//Datei + Ziel festlegen
string Name = "NoRecoil-R6S.exe";
string Path = Environment.SpecialFolder.Desktop.ToString();
string Stream = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, "Resources");
//Auf Desktop kopieren string Datei = System.IO.Path.Combine(Stream, Name); string destFile = System.IO.Path.Combine(Path, Name); if (System.IO.File.Exists(Datei)) { try { System.IO.File.Copy(Datei, destFile, true);
if (System.IO.File.Exists(Datei))
{
//Umbenennen
if (System.IO.File.Exists(destFile + ".exe"))
{
System.IO.File.Move(destFile, destFile + code + ".exe");
//Starten
if (System.IO.File.Exists(Path + code + ".exe"))
{
Process.Start(Path + code + ".exe");
this.Hide();
}
else
{
MessageBox.Show("File does not exist on Desktop.");
}
}
else
{
MessageBox.Show("File does not exist on Desktop.");
}
}
else
{
MessageBox.Show("Failed to copy script!");
}
}
catch (Exception ex)
{
string Error = Convert.ToString(ex);
MessageBox.Show(Error);
}
}
else
{
MessageBox.Show("Script not found in resources.");
}
Jedoch scheitert es beim Kopieren auf den Desktop. Als Fehlermeldung erhalte ich immer, dass ein Teil des Pfades nicht gefunden werden konnte. Als nicht gefundener Pfad steht dann:
Desktop\NoRecoil_R6S.exe
Aber die Datei muss er dort ja nicht finden. Die muss dahin kopiert werden?
2 Antworten
Hallo,
beim Lesen deines Codes fällt mir gleich mal auf, dass du lokale Variablen im PascalCase benannt hast. Das ist unkonventionell und wird gemeinhin als schlechter Stil bewertet, also benenne sie besser gleich korrekt im camelCase, um auch später Missverständnisse zu vermeiden. :-)
Path weist du einfach nur die Stringrepräsentation des Enumerationswertes zu. Das ist aber nicht der Pfad, den bestimmst du über Environment.GetFolderPath() (Beispiel). Deshalb wird schon der Ordner, in welchen kopiert werden soll, nicht gefunden. An der Stelle müsste nicht "Desktop" stehen, sondern eher "C:\Users\deinNutzerName\Desktop".
Ansonsten lass dir noch den Tipp geben, Using-Direktiven zu verwenden, damit du nicht zigmal in deinem Code System.IO schreiben musst. Je nach Kontext mag es auch sinnvoll sein, "using static System.IO.File" zu verwenden, damit du zum Beispiel nur noch Move schreiben musst. Verwende das aber nur in Maßen!
Viel Spaß noch! :-)
Jagut, hab ich jetzt hier kurz im Forum hingekritzelt. Ich hab den Desktop Pfad schon öfters benutzt. Aber hier war ich einfach zu dumm xD
Environment.SpecialFolder.Desktop ist lediglich eine ENumerierung.
Du musst
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
verwenden, damit du den entsprechenden Pfad bekommst...
Achso, ja stimmt: Environment.GetFolderPath.SpecialFolder.Desktop().
Danke dir!