【问题标题】:How to get Environment.SpecialFolders.MyVideo folder in .NET 2.0?如何在 .NET 2.0 中获取 Environment.SpecialFolder.My Video 文件夹?
【发布时间】:2010-10-25 08:53:20
【问题描述】:

谁能告诉我如何在 .NET 2.0 中获取 Environment.SpecialFolders.MyVideo 文件夹?

在 .NET 4.0 中,MyVideo 文件夹列在 enum Environment.SpecialFolders 中,但在 .NET 2.0 中它不存在。如果您必须在具有不同 Windows 本地化和操作系统版本的 .NET 2.0 下找到该文件夹​​,您会选择哪种方式?

【问题讨论】:

    标签: c# .net windows .net-2.0


    【解决方案1】:

    您必须自己调用 SHGetFolderPath。从pinvoke.net 获取声明和示例用法。为第二个参数传递 14。至少需要 Windows XP。

    【讨论】:

    • 这是我现在使用的(并且有效,谢谢): public class Folders{ public static string getFolderPath(CSIDL folder){ StringBuilder SB = new StringBuilder(); SHGetFolderPath(IntPtr.Zero, (int) 文件夹, IntPtr.Zero, 0x0000, SB);返回 SB.ToString(); } [DllImport("shell32.dll")] private static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, uint dwFlags, [Out] StringBuilder pszPath);公共枚举 CSIDL { MYVIDEO = 14 } }
    • 该代码中有一个讨厌的错误,将其设为新的 StringBuilder(259)。
    • 字符串 UserVideoPath = Folders.getFolderPath(Folders.CSIDL.MYVIDEO); More folder pointers are: ADMINTOOLS = 0x30, ALTSTARTUP = 0x1d, APPDATA = 0x1a, BITBUCKET = 10, CDBURN_AREA = 0x3b, COMMON_ADMINTOOLS = 0x2f, COMMON_ALTSTARTUP = 30, COMMON_APPDATA = 0x23, COMMON_DESKTOPDIRECTORY = 0x19, COMMON_DOCUMENTS = 0x2e, COMMON_FAVORITES = 0x1f, COMMON_MUSIC = 0x35,COMMON_PICTURES = 0x36,COMMON_PROGRAMS = 0x17,
    • COMMON_STARTMENU = 0x16,COMMON_STARTUP = 0x18,COMMON_TEMPLATES = 0x2d,COMMON_VIDEO = 0x37,控件 = 3,COOKIES = 0x21,桌面 = 0,桌面目录 = 0x10,驱动器 = 0x11,收藏夹 = 6,FLAG 0x8000, FONTS = 20, HISTORY = 0x22, INTERNET = 1, INTERNET_CACHE = 0x20, LOCAL_APPDATA = 0x1c, MYDOCUMENTS = 12, MYMUSIC = 13, MYPICTURES = 0x27, MYVIDEO = 14, NETHOOD = 0x13, NETWORK = 0x12, PER PRINTERS = 4,PRINTHOOD = 0x1b,PROFILE = 40,PROFILES = 0x3e,PROGRAM_FILES = 0x26,PROGRAM_FILES_COMMON = 0x2b,PROGRAMS = 2,RECENT = 8,SENDTO = 9,STARTMENU = 11,STARTUP = 7,
    • SYSTEM = 0x25, TEMPLATES = 0x15, WINDOWS = 0x24 是的,谢谢,它应该是一个有限的新 StringBuilder (259);添加了这些指针以供参考,我相信我会在某个时候再次看到这个问题。
    【解决方案2】:

    要获取此目录,请尝试以下操作:

    DirectoryInfo di = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments));
    string path = di.FullName.Replace(di.Name, "Videos");
    

    【讨论】:

    • di.FullName.Replace(di.Name, "Videos"); 干什么用的??
    • 在你有关于 Documents 文件夹的信息中,然后在路径中我更改视频上的 Documents 文件夹名称 - 就在这里
    • 看起来有点老套,即使它很短。我接受了另一个答案,但如果这看起来很整洁:-)
    • 好吧,我的假设是 Documents、Pictures、Music、Video 文件夹具有相同的父文件夹,因此您只需更改名称即可获得正确的名称) System.Diagnostics.Process.Start(path) ; - 工作正常
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 2017-01-29
    • 1970-01-01
    • 2021-08-17
    • 2020-04-10
    • 2011-01-15
    相关资源
    最近更新 更多