Eigentlich ist die Anforderung ganz einfach: In einer xml-Datei steht ein Pfad in dem Hex-Dateien abgelegt sind, aus einem angeschlossenen Gerät werden aus dem EEPROM Informationen ausgelesen und ein Dateifilter gesetzt und aus dem definierten Pfad soll die jüngste Datei, die zu dem Filter passt, automatisch ausgewählt werden. Doch leider funktioniert die Vorauswahl nicht, obwohl augenscheinlich der richtige Pfad konfiguriert ist.

 

Zunächst bin ich ratlos, ich debugge den Code, schneide den Pfad aus der Variablen aus, kopiere ihn in den Explorer und Windows meldet, dass es das Verzeichnis nicht finden könne. Schreibe ich denselben Pfad manuell in den Explorer wird er geöffnet. Ich vermute ein UTF-8 kodiertes Zeichen in dem Pfad und lasse mir den String umwandeln. Dazu nutze ich die folgende Funktion:

private string UTF8toASCII(string strText)
{
	System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
	Byte[] encodedBytes = utf8.GetBytes(strText);
	Byte[] convertedBytes = Encoding.Convert(Encoding.UTF8, Encoding.ASCII, encodedBytes);
	System.Text.Encoding ascii = System.Text.Encoding.ASCII;
	return ascii.GetString(convertedBytes).Trim(new char[] {'?'});
}

Und siehe da, tatsächlich beginnt die Pfaddefinition mit einem UTF-8 Zeichen: U+202A (226,128,170) – LEFT-TO-RIGHT EMBEDDING. Das ist das Problem, entferne ich das Zeichen, funktioniert die Verarbeitung wie erwartet. Übrigens verbirgt sich das Zeichen in dem Pfad, den Windows unter den Dateieigenschaften bei Sicherheit (Object Name) anzeigt.
LeftToRight
Also es ist Vorsicht geboten, wenn man den Pfad von hier kopiert. Nutzt man dagegen die Adresszeile des Explorers gibt es keine Probleme.