if-abfrage
-
-
Hmm ...
also ich hab's jetzt mal so ausprobiert:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click_1(object sender, EventArgs e) { string path = "notepad.exe"; try { using (StreamWriter sw = File.CreateText(path)) { } if (File.Exists(path)) { System.Diagnostics.Process.Start("notepad.exe"); } } catch { MessageBox.Show("File exsists!"); } } } }
Bekomme aber folgenden Fehler:
Fehler 1 Der Typ- oder Namespacename "StreamWriter" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Shyne\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs 24 24 WindowsFormsApplication1
Fehler 2 Der Name "File" ist im aktuellen Kontext nicht vorhanden. C:\Users\Shyne\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs 24 42 WindowsFormsApplication1
Fehler 3 Der Name "File" ist im aktuellen Kontext nicht vorhanden. C:\Users\Shyne\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs 25 21 WindowsFormsApplication1
-
Fehlt eine Using-Direktive
using System.IO;
-
Danke ... jetzt ersccheint zumindest keine Fehlmeldung mehr aber der Befehl System.Diagnostics.Process.Start("notepad.exe"); wird trotzdem nicht ausgeführt. Woran liegt das?
Sieht irgendwie schon zu umständig aus find ich und verstehen tu ich auch nicht alles. Kann man das ganze denn nicht bisschen einfacher lösen?
bspw. so?
if (File.Exists('notepad.exe')) { // File exisitiert } else { // File existiert nicht }
oder so ähnlich?
-
Hallo, es ist gerade spät ich bin müde und hab nur deinen code überflogen aber wenn du das so aufrufst schaut er im Root verzeichniss nach dieser Datei die du notepad.exe nennst. D.h. in deinem BIN ordner wo die erstellte exe datei liegt.
Du musst dem Process.Start den gesammten Pfad nennen wo die Datei liegt. Oder du benutzt einen Shell aufruf um notepad zu starten. Ist allerdings nicht so schön
wie war das noch gleich ..
Shell("name.exe", "path", True) ?? Bin mir nicht sicher.
PS: Falls ich mich irre und gerade verschlafenen müll rede entschuldige bitte
-
Anonymus1 schrieb:
Hallo
Ich hab folgendes Befehl:
System.Diagnostics.Process.Start("notepad.exe");
und möchte vorerst durch eine if-abfrage überprüfen ob die datei notepad.exe überhaupt existiert. wie mache ich das?
Schwer. Das einfache Prüfen über File.Exists klappt nicht, wie Du ja schon bemerkt haben wirst. Man müsste dafür also alle PATH-Einträge durchsuchen. Das wäre zwar an sich die sauberste Lösung, erfordert aber ein wenig Aufwand, welches viel Potential für Flüchtigkeitsfehler bietet. Ich würde daher empfehlen, einfach den Prozess auf gut Glück zu starten und die resultierende Ausnahme zu fangen, wenn der Prozess nicht starten kann, weil die Anwendung nicht existiert.
-
Danke für euren Beiträge. Das was mich weiter bringt sind echt die try/catch-Abfragen. Ich kannte die auch zuvor nicht. Wünschte aber dass auch manch anderen Sprachen diese Abfragen unterstützen könnten
... auf jeden Fall sehr hilfreich.
Aber was ich jetzt nicht so ganz verstehe ist warum dieser Befehl nicht ausgeführt werden kann:
System.Diagnostics.Process.Start("notepad");
Wenn ich stattdessen "mspaint" verwende, kann es ausgeführt werden. Komisch nur, dass mspaint und notepad beide CMD-Befehle sind und der einer funktioniert und der anderer nicht.
Weiss jemand woran das liegt?
Ich habe auch versucht dazu den folständigen Pfad (%SystemRoot%\system32\notepad.exe) einzugeben. Bekomme dann jedoch die folgende Fehlmeldung:
Nicht erkannte Escapesequenz.
-
Bezüglich:
Ich habe auch versucht dazu den folständigen Pfad (%SystemRoot%\system32\notepad.exe) einzugeben. Bekomme dann jedoch die folgende Fehlmeldung:
Nicht erkannte Escapesequenz.
Schreibe:
string s = @"%SystemRoot%\system32\notepad.exe"; // oder string s1 = "%SystemRoot%\\system32\\notepad.exe";
-
Also ist das jetzt so gemeint?
string s1 = "%SystemRoot%\\system32\\notepad.exe"; System.Diagnostics.Process.Start(s1);
Denn wenn ja, bekomme ich zwar keine Fehlmeldung mehr aber das Programm kann nach wie vor nicht gestarten werden.
-
Hmm ... sollte ja eigentlich schon stimmen. Hier mal der gesammter Code. Villeicht liegt der Fehler ja irgendwo anders:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { try { string notepad = "%SystemRoot%\\system32\\notepad.exe"; System.Diagnostics.Process.Start(notepad); } catch { MessageBox.Show("Fehler!"); } } } }
-
Huhu, wieder ich
Ich hab nun herausgefunden woran es liegt. Es liegt an dem %systemroot%. Denn wenn ich stattdessen "c:\\windows\\system32\\notepad.exe" verwende, klappt es ganz gut.