zoukankan      html  css  js  c++  java
  • [C#] 如何选择一个目录

    基本思路是利用SHBrowseForFolder 于是有如下代码:

    private enum BrowseFlag
    {
     BIF_RETURNONLYFSDIRS  = 0x0001,  // For finding a folder to start document searching
     BIF_DONTGOBELOWDOMAIN = 0x0002,  // For starting the Find Computer
     BIF_STATUSTEXT        = 0x0004,
     BIF_RETURNFSANCESTORS = 0x0008,
     BIF_EDITBOX           = 0x0010,
     BIF_VALIDATE          = 0x0020,   // insist on valid result (or CANCEL)

     BIF_BROWSEFORCOMPUTER = 0x1000,  // Browsing for Computers.
     BIF_BROWSEFORPRINTER  = 0x2000,  // Browsing for Printers
     BIF_BROWSEINCLUDEFILES= 0x4000   // Browsing for Everything
    }

    [StructLayout(LayoutKind.Sequential)]
    private struct BrowseInfo
    {
     public IntPtr hwndOwner;
     public IntPtr pidlRoot;
     [MarshalAs(UnmanagedType.LPTStr)]
     public string displayname;
     [MarshalAs(UnmanagedType.LPTStr)]
     public string title;
     public int flags;
     public IntPtr callback;
     public IntPtr lparam;
    }

    [DllImport("shell32.dll", CharSet=CharSet.Auto)]
    static extern IntPtr SHBrowseForFolder(ref BrowseInfo info);
    [DllImport("shell32.dll", CharSet=CharSet.Auto)]
    [return : MarshalAs(UnmanagedType.Bool)]
    internal extern static bool SHGetPathFromIDList(IntPtr pidl, [MarshalAs(UnmanagedType.LPTStr)] System.Text.StringBuilder pszPath);

    public static string BrowseFolder(IWin32Window owner)
    {
     BrowseInfo info = new BrowseInfo();
     info.flags = (int)BrowseFlag.BIF_RETURNONLYFSDIRS
         + (int)BrowseFlag.BIF_STATUSTEXT
         + (int)BrowseFlag.BIF_VALIDATE;
     info.hwndOwner = owner.Handle;
     IntPtr pidlReturned = SHBrowseForFolder(ref info);

     StringBuilder sb = new StringBuilder(260);
     SHGetPathFromIDList(pidlReturned, sb);

     return sb.ToString();
    }


    这绝对是最简便的解决办法。虽然没有释放pidlReturned有可能造成少量内存泄漏,但是那么一点内存,谁在乎呢?

  • 相关阅读:
    【Linux 内核网络协议栈源码剖析】数据包发送
    【Linux 内核网络协议栈源码剖析】connect 函数剖析(一)
    【Henu ACM Round#14 C】Duff and Weight Lifting
    【Henu ACM Round#14 B】Duff in Love
    【Henu ACM Round#14 A】Vitaly and Night
    【Henu ACM Round #13 E】Spy Syndrome 2
    【Henu ACM Round #13 F】Fibonacci-ish
    【Henu ACM Round #13 D】A Trivial Problem
    【Henu ACM Round #13 C】 Ebony and Ivory
    【Henu ACM Round #13 B】Spider Man
  • 原文地址:https://www.cnblogs.com/hehe520/p/6330491.html
Copyright © 2011-2022 走看看