SpecialDirectories und C#

BeaTBoxX

Erfahrenes Mitglied
Hallo zusammen,


ich habe ein kleines Tutorial im Web gefunden, welches die Klasse SpecialDirectories verwendet. Dabei wird der Namespace Microsoft.VisualBasic.FileIO eingebunden.
Mein Visual C# Express 2008 kann damit so leider nix anfangen.

Geht das überhaupt? Wenn ja , kann mir bitte jemand sagen was ich tun muss, um das ding zum laufen zu kriegen?

Vielen Dank!

Gruß
Frank
 
Du kannst einfach so vorgehen, das geht dann für beide Sprachen:

Code:
Environment.GetFolderPath(Environment.SpecialFolder.Programs)

SpecialFolder ist eine Enumeration in der Klasse "System.Environment".
 
Wobei Anzumerken ist, dass die SpecialDirectories Enumeration nicht vollständig ist. Es gibt eine einige Pfade wie z.B. das x86 Program Files Verzeichnis, welches über diese Enumeration leider nicht ermittelt werden kann.

Für diesen Fall gibt es eine WinAPI, leider habe ich den Aufruf nicht im Kopf und den entsprechenden Source nicht hier, ab Montag schaue ich gerne mal nach und ergänze das hier.
 
So sollte es auch mit den anderen SpecialDirectories klappen...

Hinweis: Ich habe den Code von VB.NET nach C# konvertiert, könnte also sein, dass es so nicht läuft.

API Definition
C#:
[Runtime.InteropServices.DllImport("shell32.dll")] 
public static bool SHGetSpecialFolderPath(IntPtr hwndOwner, [Runtime.InteropServices.Out()] 
StringBuilder lpszPath, int nFolder, bool fCreate) 
{ 
}

Hier der Aufruf (SHGetSpecialFolderPath wurde in dem Projekt, woher dieser Code stammt in einer statischen Klasse APIDefinitions definiert)
C#:
StringBuilder path = new StringBuilder(); 
APIDefinitions.SHGetSpecialFolderPath(new IntPtr(0), path, 42, false);

In diesem Beispiel (Parameter: nFolder=42) wird das ProgramFiles x86 Verzeichnis auf x64 Systemen zurückgeben.
Für eine Liste mit weiteren Konstanten musst du mal die MSDN nach SHGetSpecialFolderPath durchsuchen, dort solltest du auf eine vollständige Liste der gültigen Konstanten stoßen.
 
Zuletzt bearbeitet:
Damit wir uns hier nich verrennen.. ich meine Falle suche ich nach einer Möglichkeit auf den Desktop eines Users zuzugreifen %)

und
Code:
Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
hat funktioniert :)
 
Zuletzt bearbeitet:
Zurück