2009-04-29 32 views
9

Tôi đang sử dụng luồng tệp để ghi tệp.C# tham chiếu đến máy tính để bàn

Tôi đã hy vọng có thể ghi tệp lên màn hình.

Nếu tôi có một cái gì đó giống như

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

Tôi muốn để có thể có một số loại @desktop xác định ở phía trước của tên tập tin đó sẽ tự động chèn đường dẫn đến máy tính để bàn. Điều này tồn tại trong C#? HOẶC tôi có phải xem và xem những gì máy tính để bàn có trên máy tính bằng máy tính (OS by OS) hay không.

Trả lời

35

nhanh tìm kiếm google tiết lộ này:

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

EDIT: Điều này sẽ làm việc cho Windows, nhưng Mono supports it, quá.

+0

phải thêm \\ giữa hai nhưng đó là hoàn hảo. Cảm ơn –

+11

Không thêm \\ theo cách thủ công. Sử dụng Path.Combine thay thế. – OregonGhost

+4

Và bạn không cần phải gọi ToString() trên một chuỗi –

10

Bạn muốn sử dụng Environment.GetFolderPath, chuyển qua số SpecialFolder.DesktopDirectory.

Ngoài ra còn có SpecialFolder.Desktop đại diện cho lôgic vị trí máy tính để bàn - không rõ sự khác biệt giữa hai là gì.

+3

Thánh bò, Jon Skeet đã bị đánh vào cú đấm.Jon, bạn không mất đi lợi thế của bạn với chúng tôi, bạn là bạn thân? :) – TheTXI

+0

Tôi đang bận tìm kiếm các liên kết: ( –

+2

Hãy đến với Jon, bạn phải ghi nhớ công cụ này ngay bây giờ :) – TheTXI

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

Cái gì như:

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

+1 Cái này hoạt động đúng nguyên văn! ;-) – Codex

2

vâng. bạn có thể sử dụng biến môi trường. như

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

nhưng tôi không khuyên bạn nên tự động ghi tệp nhật ký vào máy tính để bàn của người dùng. bạn nên thêm liên kết vào tệp vào thư mục trình đơn bắt đầu của mình. hoặc thậm chí phổ biến chúng trong nhật ký sự kiện. (Tốt hơn)

3

Bạn muốn Environment.SpecialFolder

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

Tôi cũng sử dụng phương pháp nêu trên.

Nhưng đây là một vài khác nhau tùy chọn mà làm việc quá (chỉ để có một danh sách toàn diện hơn):

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

Sau đó:

string fileName = Path.Combine(GetDesktopPath(), "NameOfLogFile.txt"); 
Các vấn đề liên quan