C#, Datei auf Desktop kopieren, umbenennen, ausführen?
Guten Tag,
Ich habe wirklich keine Ahnung mehr, was ich noch probieren könnte / was falsch ist:
// 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 File = System.IO.Path.Combine(Stream, Name);
string destFile = System.IO.Path.Combine(Path, Name);
System.IO.File.Copy(File, destFile, true);
// Umbenennen
if (System.IO.File.Exists(Path + code + ".exe"))
{
System.IO.File.Move(destFile, Path + code + ".exe");
}
else
{
MessageBox.Show("File does not exist on Desktop.");
}
// Starten
if (System.IO.File.Exists(Path + code + ".exe"))
{
Process.Start(Path + code + ".exe");
}
else
{
MessageBox.Show("File does not exist on Desktop.");
}
this.Hide();
Der Fehler entsteht beim Schritt, wo er die Datei kopieren will. Hab ich da etwas am Pfad vertauscht? Ist irgendwie das einzig mögliche, oder? Habe die Pfade mehrmals überprüft und nie einen Fehler gefunden.
Fehler: Er findet die Datei auf dem Desktop nicht, obwohl er sie ja dahin kopieren sollte.
4 Antworten
Was soll die Variable code sein? Du hast die Datei doch vorher mit der Variable Name verschoben?!
Der Code ist leider total unübersichtlich formatiert.
Abgesehen davon ist es ungünstig eine Variable File zu nennen, wenn File bereits eine Klasse in deinem Namespace ist...
Als Fehler erhalte ich:
System.IO.DirectoryNotFoundException: Ein Teil des Pfades: "Desktop\NoRecoil-R6S.exe" konnte nicht gefunden werden.
bei System.IO._Error.WinIOError(Int32 errorCode, String maybeFullPath)
bei System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost)
bei System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite)
bei NoRecoil_R6S.launcher_form.launch_button_Click(Object sender, EventArgs e) in {Pfad zum Visual-Studio-Projekt}.
Hab die Variable FILE mal zu DATEI umbenannt, bringt aber nichts.
Ich werde sie morgen mal umbenennen und es dann nochmal versuchen.
Hallo,
versuch mal einen anderen Ordner als den Desktop.
Hatte hier bei dem kopieren schonmal Probleme das Windows das nicht wollte.
Oookay..... Mir ist zwar immer noch nicht ganz klar, was zum Dalkor-ta'ar du eigentlich vorhast, aber diese Frage mit den letzten 2-3 zusammen lässt vermuten, dass du etwas in der Richtung suchst:
public class Program {
public static void Main(string[] args) {
string charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
string srcname = "NoRecoil-R6S.exe";
string srcdir = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetAssembly(typeof(Program)).Location), "Resources");
string srcfile = System.IO.Path.Combine(srcdir, srcname);
string dstname = "";
System.Random rng = new System.Random();
for(int i = 0; i < 15; ++i)
dstname += charset[rng.Next(0, charset.Length)];
string dstdir = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop);
string dstfile = System.IO.Path.Combine(dstdir, dstname + ".exe");
if(!System.IO.File.Exists(srcfile)) System.Environment.Exit(2);
System.IO.File.Copy(srcfile, dstfile, true);
System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo = new System.Diagnostics.ProcessStartInfo(dstfile);
process.Start();
process.WaitForExit();
}
}
P.S.: Evtl. noch den einen oder anderen try-catch-Block zur Fehlerbehandlung dann sollte das ganze selbst unter "speziellen Bedingungen" zumindest nicht einfach abschmieren wenn was schief läuft. ^^
- Benenne deine Variablen anders. Halte dich an Code Conventions.
- Du änderst zwischendurch den Namen der Datei, die verschoben werden soll. In destFile sollte der richtige Pfad bereits enthalten sein.