Wie erhalten Sie das zugehörige Symbol aus einem Netzwerk-share-Datei
Ich bin mit Symbol.ExtractAssociatedIcon man das Symbol einer Datei , die ein Benutzer auswählt, in einem openfiledialog.
Ist das problem wenn der Benutzer wählt ein Symbol aus einem Netzwerk freigeben, dann wird der filename-Eigenschaft der openfiledialog ist im UNC-format und dies führt zu einem ArgumentException
im ExtractAssocaitedIcon
:
Value of '\\server\share\filename' is not valid for 'filePath'.
Stack Trace:
at System.Drawing.Icon.ExtractAssociatedIcon(String filePath, Int32 index)
Also meine Frage gegeben ist eine Datei angegeben, die als \\server\share\filename
, wie bekomme ich das Symbol?
Hinweis: .NET 2.0
- Poste die exception und stack-trace.
- Stack trace ist nicht wirklich erforderlich, da der Fehler reproduzierbar ist, wie beschrieben. Aber ich habe die stack-trace-ich bin heute sehen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Suchen auf diesem mit Reflektor, ist es letztlich aufrufen
ExtractAssociatedIcon
imshell32.dll
.Haben Sie versucht, die gehen, um die BCL-Zugriff über PInvoke?
Beispiel-code (über PInvoke.Net):
Vollständigkeit halber, hier ist ein
ExtractAssociatedIcon
- routine, die funktioniert:Eine Methode, dies zu erreichen, rufen Sie Ihre UNC-Pfad und-vorübergehend-zuordnen einen Laufwerkbuchstaben, verwenden Sie dann das Laufwerk in Ihrem .ExtractAssociatedIcon-Methode. Wenn Sie abgerufen haben das Symbol, können Sie trennen Sie das Laufwerk.
Es ist nicht elegant, aber es sollte gut funktionieren.
Eine andere Möglichkeit ist, kopieren Sie die Datei, die der Benutzer auswählt, zu deren %TEMP% ein, und verwenden Sie
Icon.ExtractAssociatedIcon
es. Denken Sie daran, zu bereinigen nach sich selbst.Offensichtlich nicht eine große Lösung, wenn Sie die Unterstützung von GROßEN Dateien!