2009-04-29 13 views
9

Używam strumienia plików do zapisania pliku.C# odwołanie do pulpitu

Miałem nadzieję, że będę mógł zapisać plik na pulpicie.

Jeśli mam coś takiego

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

chciałbym móc mieć jakieś @desktop zidentyfikowane przed nazwą pliku, który automatycznie wstawić ścieżkę do pulpitu. Czy to istnieje w C#? LUB czy muszę sprawdzić i zobaczyć, co jest na pulpicie komputera przez komputer (OS OS).

Odpowiedz

35

Szybkie wyszukiwanie google ujawnia ten:

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

EDIT: To będzie działać na Windows, ale Mono supports it też.

+0

musiał dodać \\ między nimi, ale to idealny. Dziękujemy –

+11

Nie dodawaj \\ ręcznie. Zamiast tego użyj Path.Combine. – OregonGhost

+4

I nie trzeba wywoływać ToString() na łańcuchu –

10

Chcesz użyć Environment.GetFolderPath, przekazując w SpecialFolder.DesktopDirectory.

Istnieje również SpecialFolder.Desktop, który reprezentuje lokalizację pulpitu - nie jest jasne, jaka jest różnica między tymi dwoma elementami.

+3

Święta krowa, Jon Skeet został pokonany.Jon, nie tracisz przewagi nad nami, jesteś kumplem? :) – TheTXI

+0

Byłem zajęty przeglądaniem linków :( –

+2

Dalej Jon, powinieneś już zapamiętać te rzeczy :) – TheTXI

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

Coś jak:

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

+1 Ten działa dosłownie! ;-) – Codex

2

yep. możesz używać zmiennych środowiskowych. jak

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

ale nie polecam, aby automatycznie zapisać plik log na pulpicie użytkownika. powinieneś dodać link do pliku do folderu menu startowego. lub nawet zapełnić je w dzienniku zdarzeń. (Znacznie lepiej)

3

Chcesz Environment.SpecialFolder

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

ja również użyć metody wymienione powyżej.

Ale oto kilka różnych opcji, które działają zbyt (tylko do bardziej obszernej listy):

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; 
    } 
} 

Następnie:

string fileName = Path.Combine(GetDesktopPath(), "NameOfLogFile.txt"); 
Powiązane problemy