Nach Bildladen findet System.IO.File.Exist() keine Dateien mehr.

Drache2

Erfahrenes Mitglied
Tach allerseits.

Bin im Moment an einem, für meine Verhältnisse, relativ großen Projekt, nämlich ein Fräsenansteuerungsprogramm für eine selbstgebaute Platinenfräse.

Nun will ich in einem Selbstgeschriebenen Frameworkelement (der Editor) eine Bilddatei einladen, die vom Nutzer ausgesucht werden aknn (GUI und co. steht).
das Bild lädt auch wunderbar.
Also, Status: Bild geladen, wird angezeigt, noch läuft alles wunderbar.
Jedoch wenn ich dann,
mit hilfe von System.IO.File.Exist(Pfad),
gucken will, ob eine Datei Existiert, sagt der mir IMMER, die existiere nicht, obwohl ich zu 100% weiß und es auch x-fach überprüft habe, dass diese genau da existiert.

Dachte erts es liege am Openfiledialog, aber das konnte ich schnell wiederlegen.
Bleibt also nurnoch die Bildlademethode.

Nun, hier der relevante Code mit dem ich die Bilddatei (IMMER .bmp) in ein ImageSource lade:

Code:
//Das ist die Variable in der ich das Bild abspeicher, um es später zeichnen zu können.
//ImageSource platinenhintergrundbild

//Neuer_Pfad ist der Absolute Dateipfad für das Bild.

var uriSource = new Uri(Neuer_Pfad, UriKind.Absolute);
this.platinenhintergrundbild = new System.Windows.Media.Imaging.BitmapImage(uriSource);

Das Beispiel habe ich aus dem Internet geholt.
Das Projekt läuft unter .Net 3.5 und ist in C# geschrieben.
Nutze selbst Win7 ulti 32bit, das Projekt sollte aber auch auf XP 32 bit laufen!
Die Abfrage der Existens einer Datei mit System.IO.File.Exist(Pfad) geschiet mit relativen Pfadangaben.
Die Bilddatei wird mit Absoluten Pfadangaben geladen.

Hoffe es weiß wer Rat.
Oder vielleicht kennt ja jemand eine bessere Möglichkeit ein Bild (bmp) zu laden.

Gruß Drache2
 
Im Endeffekt nutze ich die einmal um zu prüfen, ob der vom Nutzer eingegebene Pfad (Absolut) auch existiert.
Würde die da schon sagen, dass die Datei nicht existiert, würde das Bild nicht angezeigt werden, es wird aber angezeigt.

Zudem lasse ich schon beim Programmstart viele Dateien damit prüfen, die jedoch alle relative Pfade haben.
(Relativ, weil das alles vom Programmordner ausgeht)

Habe es aber dennoch ausprobiert, absolute Pfade findet der noch.
Nur relative Pfade mag er danach nicht mehr.
Auch wenn ich vorher einen Absoluten Pfad der gleichen Partition aufrufe.

//EDIT:
Hmm, musste feststellen, dass wenn ich die Bildladmethode entferne und nur die Existprüfungen habe, dass der Fehler immer noch da ist.
Hat die Exist Methode vll irgentwo eine Makke von der keiner weiß?

//EDIT2:
So. nach einiger Suche bin ich auf das ergebnis gekommen, dass sich der relative Pfad bei der Existmethode auf den Pfad in System.IO.Directory.GetCurrentDirectory() bezieht. Mit der Methode lässt sich nachgucken, in welchem Pfad der gerade guckt.
Ändern kann man den mit der gleichnamigen set Methode System.IO.Directory.SetCurrentDirectory(string Pfad).
Nun bräuchte ichnurnoch sowas wie Application.Current.StartUpPath, aber das existiert bei mir nicht. Nur StartUpUri und das ist NICHT das was ich brauche.
Wenn ich also noch den Startup-Ordner nachgucken könnte wäre das Problem somit gelöst.
 
Zuletzt bearbeitet:
Probiers mal so:
C#:
... = System.IO.Path.GetDirectoryName(Environment.CommandLine);
Dabei musst du vorsichtig sein, falls du dein Programm mit Parametern aufrufst. Alternativ über Reflection:
C#:
... = System.Reflection.Assembly.GetExecutingAssembly.Location;
Ich frag mich grad, ob es da nicht eine einfachere Lösung gibt, wenn man nicht Forms benutzt...
 
Nun, schonmal vielen Dank :)
Die 2. Möglichkeit ist die, die ich nehme.

Und, ich hab schon öfters von Application.StartupPath gelesen.
Das istd as was ich brauche, aber es existiert nicht bei mir (oder ist das nur WinForms?)
 
Die Eigenschaft heißt vollständig: System.Windows.Forms.Application.StartupPath :)
Allerdings ist die statisch, das heißt, wenn du eine Referenz auf System.Windows.Forms hinzufügst, kannst du sie verwenden...
 
Hmm, da ich die so oder wegen dem OpenFileDialog brauche, kann ichs ja nutzen, aber dennoch ist es gut eine Möglichkeit zu kennen, für die man System.Windows.Forms nicht einbinden muss :)
Dankeschön.
 
Zurück