C# Datei vorhanden, Datei wird nicht gefunden - nur aus .exe

palaber

Captain
Registriert
Juni 2006
Beiträge
3.856
Hey,

ich testes gerade ein kleines Programm, welches ich erstellt habe. Leider klappt es nicht so wie ich mir das vorgestellt habe. Aber zunaechst einmal zu dem Programm.

Ich habe eine kleine GUI, in der man Dateinamen per Dropdown aus einem Pfad auswaehlen kann. Der Pfad wird in einer Setupdatei gespeichert. Jede unter dem Pfad liegende Datei entspricht einer Teilenummer.
Diese Teilenummer kann ich ueber mein Programm anlegen und aendern. Anschliesend kann die Datei ausgelesen werden und mit Daten eines Oszilloskops verglichen werden.

Das funktioniert alles, wenn ich es aus Visual Studio im debuger laufen lasse. Wenn ich aber die Exe aus dem Debug Ordner kopiere und irgendwo ablege, kann ich die Setupdatei veraendern. Auch das Erstellen und aendern der Teilenummern ist moeglich. Aber wenn ich dann die Datei mit meinen Oszidaten vergleichen will, kommt die Datei sei nicht vorhanden.

Der Pfad der zu speichernden Daten ist auf einem Server. Dort liegen auch die Partnummern. Wie gesagt, ich kann die dort auch erstellen und bearbeiten. Nur beim vergleichen kommt der Fehler, dass die Datei nicht vorhanden sei. Wisst ihr woran das liegt? Beim Debuggen funktionert alles :(

Danke fuer eure hilfe.
 
Die "Debugger"-exe liegt in einem Anderen Verzeichnis...vielleicht liegt da das Problem.
 
Mh, ich hab keine Release exe... der Ordner ist leer. Arbeite hier gerade mit VS Express 2010 und hab noch nie davor so wirklich richtig viel programmiert und nie nen selbst lauffaehiges Programm mit Windows Forms erstellt... :(

Ausserdem kann ich ja mit dem Programm Textdatei neu erstellen und spaeter auslesen und bearbeiten. Nur beim vergleich kommt die Fehlermeldung. Bevor ich den vergleich mache, wird geprueft ob die Datei vorhanden ist (File.Exist()).
 
Zuletzt bearbeitet:
Kannst du die relevanten Programmteile mal hier posten?
 
I try - wird aber ziemlich viel werden... ich versuche es erst einmal nur mit denen, die vermutlich den fehler werfen. Denn wie gesagt, ich hab das problem das beim Debuggen alles funktioniert...

So hier wird erstmal die Methode aufgerufen, welche Checkt, ob hinter der ausgewaehlten Partnummer auch wirklich eine Datei liegt:
Code:
GetData.checkFile(sPartNoPath, sWhatOperation);       //check if file exist  
                arrDataInput = GetData.copyArray(sPartNoPath);        //copy input from file to array

Hier die Checkfilemethode:

Code:
public static void checkFile(string filename, string s)
        {
            if (!File.Exists(filename))
            {
                throw new SystemException("file to " + s + " doesnt exist!");
            }
        }

Und dann die Methode, die mir die Datei auslesen soll und in einem String Array zurueck gibt.
Code:
public static string[] copyArray(string filename)
        {

            int iLines = FillCombo.CountLines(filename);       //get the numbers of elements for the array

            string []arrCopyInput = new string[iLines];

            //read file and write it in array
            using (StreamReader cF = new StreamReader(filename))
            {
                for (int i = 0; i < arrCopyInput.Length; i++)
                {
                    arrCopyInput[i] = cF.ReadLine();
                }

            }
            return arrCopyInput;
        }

Bringt es euch weiter?

Ich kann uebrigends, sobald ich die exe Datei ausfuehre, auch nicht mehr auf meinem lokalen Rechner Daten aus anderen Pfaden nutzten. Nur der Ordner, in dem sich die EXE Datei befindet ist zugaenglich, nicht einmal dessen Unterordner!
 
Da du in checkFile eine Exception wirfst brauchst du die Methode eigentlich nicht. Wenn die Datei nicht existiert bekommst du vom StreamReader auch eine Exception geworfen...

Laut deiner Problembeschreibung scheint das Problem aber woanders zu liegen: In der Setup-Datei mit dem auszulesenden Pfad.
Zeig mal den Inhalt der Datei und wie du diese ausliest.
 
Kopier die Exe mal samt .pdb-Dateien an deinen neuen Zielort. Dann starte es da und wähle im VS2010 den Punkt "Debuggen/An den Prozess anhängen..." und wähle deinen Prozess aus der Liste aus. Dann schau mal wo die Exception fliegt und warum.
 
Hey, ich habe das Problem gefunden. Ich nutze mehrmals den Methodenaufruf fuer die Checkfilesache - aber gerade fuer den Vergleich habe ich den Aufruf in einem anderen Thread ausgelagert (da der vergleich eine Endlosschleife ist, die solange laeuft, bis jemand nen stop Button drueckt). Habe den Methodenaufruf jetzt an ne andere Stelle gepackt und es geht! :freak:

Aber trotzdem vielen Dank fuer eure hilfe!
 
Zurück
Oben