2009-04-29 12 views
9

Ich verwende einen Dateistream, um eine Datei zu schreiben.C# Verweis auf den Desktop

Ich hatte gehofft, in der Lage zu sein, die Datei auf dem Desktop zu schreiben.

Wenn ich so etwas wie

tw = new StreamWriter("NameOflog file.txt"); 

würde ich eine Art @desktop vor dem Dateinamen identifiziert zu haben, in der Lage sein möchten, die automatisch den Pfad auf dem Desktop einsetzen würde. Gibt es das in C#? ODER muss ich schauen und sehen, was Desktop auf einem Computer von Computer (Betriebssystem für Betriebssystem) ist.

Antwort

35

schnelle Google-Suche zeigt diese:

string strPath = Environment.GetFolderPath(
         System.Environment.SpecialFolder.DesktopDirectory); 

EDIT: Dies wird für Windows arbeiten, aber Mono supports it auch.

+0

\\ zwischen den beiden fügen hatte, aber das ist perfekt. Danke –

+11

Fügen Sie \\ nicht manuell hinzu. Verwenden Sie stattdessen Path.Combine. – OregonGhost

+4

Und Sie müssen nicht ToString() auf einer Zeichenfolge aufrufen –

10

Sie möchten Environment.GetFolderPath verwenden, indem Sie SpecialFolder.DesktopDirectory übergeben.

Es gibt auch SpecialFolder.Desktop, die die logische Desktop-Position darstellt - es ist nicht klar, was der Unterschied zwischen den beiden ist.

+3

Heilige Kuh, Jon Skeet wurde geschlagen.Jon, du verlierst deinen Vorteil nicht an uns, oder, Kumpel? :) – TheTXI

+0

Ich war beschäftigt nachschlagen der Links :( –

+2

Komm Jon, du sollst dieses Zeug auswendig gelernt haben :) – TheTXI

1
Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)) 
7

Etwas wie:

string logPath = Path.Combine(
     Environment.GetFolderPath(Environment.SpecialFolder.Desktop), 
     "NameOflog file.txt"); 
    tw = new StreamWriter(logPath); 
+0

+1 Dieser funktioniert wörtlich! ;-) – Codex

2

yep. können Sie Umgebungsvariablen verwenden. wie

tw = new StreamWriter("%USERPROFILE%\Desktop\mylogfile.txt"); 

, aber ich würde nicht eine Protokolldatei auf den Benutzer-Desktop automatisch schreiben empfehlen. sollten Sie den Link zu der Datei zu Ihrem Startmenüordner hinzufügen. oder füllen Sie sie sogar im Ereignisprotokoll auf. (Viel besser)

3

Sie wollen Environment.SpecialFolder

string fileName = "NameOflog file.txt"; 
path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), fileName); 
tw = new StreamWriter(path); 
1

Ich benutze auch die oben genannten Verfahren.

Aber hier ein paar verschiedene Optionen, die auch funktionieren (nur eine umfassendere Liste haben):

using System; 
using System.Runtime.InteropServices; 
using System.Text; 

class Program 
{ 
    // 1st way 
    private const int MAX_PATH = 260; 
    private const int CSIDL_DESKTOP = 0x0000; 
    private const int CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019; // Can get to All Users desktop even on .NET 2.0, 
                  // where Environment.SpecialFolder.CommonDesktopDirectory is not available 
    [DllImport("shell32.dll")] 
    private static extern bool SHGetSpecialFolderPath(IntPtr hwndOwner, StringBuilder lpszPath, int nFolder, bool fCreate); 
    static string GetDesktopPath() 
    { 
    StringBuilder currentUserDesktop = new StringBuilder(MAX_PATH); 
    SHGetSpecialFolderPath((IntPtr)0, currentUserDesktop, CSIDL_DESKTOP, false); 
    return currentUserDesktop.ToString(); 
    } 

    // 2nd way 
    static string YetAnotherGetDesktopPath() 
    { 
    Guid PublicDesktop = new Guid("C4AA340D-F20F-4863-AFEF-F87EF2E6BA25"); 
    IntPtr pPath; 

    if (SHGetKnownFolderPath(PublicDesktop, 0, IntPtr.Zero, out pPath) == 0) 
    { 
     return System.Runtime.InteropServices.Marshal.PtrToStringUni(pPath); 
    } 

    return string.Empty; 
    } 
} 

Dann:

string fileName = Path.Combine(GetDesktopPath(), "NameOfLogFile.txt"); 
Verwandte Themen