Frage

Ich habe eine Anwendung, die für den Einsatz in ganz Europa lokalisiert ist.

Ich habe eine Menüoption, die eine Datei von der Festplatte lädt.

Dieser Vorgang funktioniert gut auf meiner Entwicklermaschine, funktioniert jedoch nicht auf der virtuellen Maschine, mit der ich andere Betriebssysteme testen kann. Z. B. Französisch, Spanisch usw.

Eine FilenotFoundException wird generiert, wenn der StreamReader versucht, die Datei zu öffnen.

Es heißt "'konnte die Datei C: Programme nicht finden mycompany mytool bin files debug.txt'"

Die Datei existiert am richtigen Ort und mit dem richtigen Dateinamen.

Die Verzeichnisnamen im Ziel (Französisch) Betriebssystem sind mit der Dev -Maschine überein.

Irgendwelche Ideen?

string ourPath =   System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);

           try
        {
            System.IO.StreamReader sr = System.IO.File.OpenText(ourPath + @"\bin\Files\debug.txt");
            string input = null;
            while ((input = sr.ReadLine()) != null)
            {
                m_text.Append(input);
            }
            sr.Close();
        }
        catch (System.IO.FileNotFoundException)
        {
            MessageBox.Show("LoadDebugOptions: File Not Found: " + ex.Message);
        }
War es hilfreich?

Lösung

Ok fand das Problem.

Stellte fest, dass das Betriebssystem die in Explorer als "debug.txt" angezeigte Datei als "debug.txt.txt" las.

Dies wurde unter Verwendung eines Aufrufs von System.io.ioDirectory.getFiles ermittelt, um die Dateien im Zielverzeichnis aufzulisten.

Wenn ich die .txt -Erweiterung entfernen, so dass Windows Explorer sie als "Debug" anzeigt, wird die Datei gefunden.

Es stellte sich heraus, dass Explorer die Dateierweiterungen bekannter Typen auf der Zielmaschine versteckt hat.

Zu Ihrer Information ------------------------------------------------- ---------------

Öffnen Sie Explorer, wählen Sie Tools-> Ordneroptionen und dann die Registerkarte Ansicht.

Scrollen Sie nach unten und deaktivieren Sie "Erweiterungen für bekannte Dateitypen ausblenden".

Andere Tipps

Um sicherzustellen, dass Sie im richtigen Ordner sind, schauen Sie sich an Environment.SpecialFolders

z.B

string path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);

Überprüfen Sie dann auch die Berechtigungen in der spezifischen Datei.

Ich würde auch versuchen zu benutzen

File.Exists()

vor dem Öffnen. Und ein wenig Rat ist zu verwenden

Path.Combine()

Bei der Kombination von 2 Teilen eines Pfades.

Vielleicht ist dieses Präfix falsch: C:\Program Files

Zum Beispiel für brasilianische portugiesische Windows -Installationen, die der Ordner wird "C:\Arquivos de Programas\"; Sie sollten sicherstellen, dass Ihre Windows -Installationen keine gleiche "Funktion" haben.

Wenn dieser Beispielcode in diesem Ordner ausgeführt wird, können Sie einen relativen Pfad verwenden.

Sie könnten auch versuchen zu verwenden ourPath = "%ProgramFiles%\MyCompany\MyTool\

Dies kann an der Sicherheitsausnahme zurückzuführen sein, da der aktuelle Benutzer, der versucht zu lesen, keine ausreichende Berechtigung hat. Ich bin so oft begegnet ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top