Hinweis : Ich habe das Verzeichnis durch a
und die exe durch b.exe
ersetzt und ich habe jeden Test wiederholt, um sicherzustellen, dass es sich nicht um eine Tipp-Syntax handelt.
Ich habe einen sehr einfachen Code, der perfekt von Windows XP bis Windows 7 funktioniert.
%Vor%und auch
%Vor% Seit Windows 10 (ich habe noch nicht 8 und 8.1 getestet), wirft der erste Code System.ComponentModel.Win32Exception
("Angegebene Datei nicht gefunden") und zweitens wird false zurückgegeben. .
Ich habe auch bemerkt, dass es dasselbe Verhalten ist, wenn ich "c: \ a \ b.exe" mit dem Windows-Startfenster (Windows-Taste + R) starte.
Gibt es Workarounds, um dieses Problem zu lösen? Vorzugsweise eine Lösung, die keine Neukompilierung impliziert.
NB :
c:\b.exe
funktioniert !! Danke euch allen,
BEARBEITEN:
a
directory und b.exe
) Console.WriteLine(String.Join("\r\n", Directory.GetDirectories(@"c:\")))
zeige das Verzeichnis c:\a
an
UPDATE:
Ergebnisse von icalcs c:\a\
:
Ergebnisse von icalcs c:\a\b.exe
:
"Tout le monde" bedeutet Jeder.
AKTUALISIEREN :
Auf die letzten Nachrichten kann ich folgendes tun:
%Vor%Aber ich kann das nicht machen
%Vor%Werfen "System.NotSupportedException". StackTrace ist wie folgt:
%Vor%Es sind einige nicht druckbare Bytes, die im Dateipfad hinzugefügt werden, wenn Sie einige Beschriftungen im Windows 10 Explorer kopieren / einfügen.
Betrachten Sie diesen Code:
%Vor% Diese Zeile sieht gleich aus und sollte keine Ausnahme auslösen (auch wenn das Verzeichnis c:\a
nicht existiert), aber wenn Sie den Code oben in einer Anwendung kopieren / einfügen, erhöht die zweite Zeile NotSupportedException
mit Wörtern : " Das Format des angegebenen Pfads wird nicht unterstützt ".
Ich habe den .NET-Quellcode überprüft und die Methode gefunden StringExpressionSet.Canonicalize , das NotSupportedException ausgelöst hat:
%Vor%Und eigentlich:
%Vor% Um keinen Tippfehler zu machen, verwende ich den Verzeichnispfad von Rechtsklick auf eine Datei - & gt; Properties
- & gt; Security
Sie werden jetzt gewarnt !
Das Verschleiern des Verzeichnis- und Dateinamens macht es sehr schwer, Ihnen zu helfen. Aber es gibt einen offensichtlichen Stein, unter dem man die Akzentbuchstaben sehen kann, die so stark zerfleischt werden, dass dies niemals passieren sollte. Die Maschine spricht Französisch, aber die Codierung, die verwendet wird, ist 1250, nur in Osteuropa verwendet. Eine sehr bizarre Diskrepanz, besonders für eine App im Konsolenmodus.
Wenn das Verzeichnis real a
ebenfalls Zeichen mit diakritischen Zeichen enthält, kann sich die Ursache für die fehlerhafte icalcs.exe-Programmausgabe auch auf die Namenscodierung des Dateisystems auswirken. Raue Schlussfolgerung ist, dass diese Maschine ziemlich krank ist und Hilfe vom Geek-Trupp braucht, um besser zu werden.
Tags und Links c# windows encoding windows-10 filesystems