C#引用桌面

时间:2009-04-29 12:41:56

标签: c#

我正在使用文件流来写出文件。

我希望能够将文件写入桌面。

如果我有类似

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

我希望能够在文件名前面找到某种可以自动插入桌面路径的@desktop。这是否存在于C#中?或者我是否必须通过计算机(操作系统操作系统)来查看计算机上的桌面是什么。

7 个答案:

答案 0 :(得分:35)

快速谷歌搜索揭示了这一个:

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

编辑:这适用于Windows,但也适用于Mono supports it

答案 1 :(得分:10)

您希望使用Environment.GetFolderPath,传入SpecialFolder.DesktopDirectory

还有SpecialFolder.Desktop代表逻辑桌面位置 - 但目前尚不清楚两者之间的区别是什么。

答案 2 :(得分:7)

类似的东西:

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

答案 3 :(得分:3)

你想要Environment.SpecialFolder

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

答案 4 :(得分:2)

是的。 你可以使用环境变量。 喜欢

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

但我不建议自动将日志文件写入用户桌面。 您应该将文件的链接添加到开始菜单文件夹。 甚至在事件日志中填充它们。 (好多了)

答案 5 :(得分:1)

Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory))

答案 6 :(得分:1)

我也使用上面提到的方法。

但是这里有几个不同的选项也可以工作(只是为了有一个更全面的列表):

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

然后:

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