`
emowuyi
  • 浏览: 1481708 次
文章分类
社区版块
存档分类
最新评论

[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有可能造成少量内存泄漏,但是那么一点内存,谁在乎呢?

分享到:
评论

相关推荐

    C#案例:选择文件目录

    C#案例:选择文件目录:单击“浏览”,打开“文件目录”对话框

    WPF c# 目录选择源码

    WPF c# 目录选择源码,用来替换Forms的目录选择

    C#获取系统目录属性信息

    C#获取系统目录属性信息,左侧以Treeview的形式展开磁盘信息,选择任意一个目录后,右侧显示目录属性信息,包括创建时间、访问时间和上次写入时间等。可以学习下填充目录和文件到 TreeView 控件中, 获取驱动器顶级...

    C#经典300题 题目目录

    C#经典300题 题目目录

    C# WPF 下载网络文件、流到指定目录,支持选择目标目录进行存储,可实时查看文件下载进度

    C# WPF 下载网络文件、流到指定目录,支持选择目标目录进行存储,可实时查看文件下载进度,进度是progressbar实时展示,自己添加下进度条的style即可

    c# winform datagridview 中嵌套的combobox实现级联选择

    c# winform datagridview 中嵌套的combobox实现级联选择

    C# 实现一个图片浏览器

    左侧用TreeView显示目录结构 当选择一个目录的时候,列出其中的所有图片(jpg.bmp, png, tif, gif) 右侧为一个图片显示框和左右的按钮,图片显示框负责显示图片。

    c#实现FTP服务器

    c#实现FTP服务器, 功能 ①、按标准FTP协议登录FTP服务器,进行身份验证; ②、显示远程目录、文件列表,进行目录切换; ③、目录、文件列表的排序显示(文件名、时间、类型); ④、能上传文件、下载、删除文件...

    C#入门经典(中文文字版)_带目录

    们喜欢 C#的一个原因是其派生于 C/C++的简洁明了的语法,这种语法简化了以前一些给程序 员带来困扰的问题。尽管做了这些简化,但 C#仍保持了 C++原有的功能,所以现在没有理由 不从 C++转向 C#。C#语言并不难,也...

    C#百例(100个个例,教你学会C#)

    15、该程序是一个输入姓名的输入框、一个确定按钮和一个退出按钮,输入姓名后,生成一个欢迎框。 16、该程序是一个类似记事本的小程序。它设置了退出键和菜单栏,在菜单栏可以生成弹出窗口或是已选标记。 17、该程序...

    C#树形菜单的CheckBox级联选择

    实现树形结构的CheckBox的子节点选中所有父级节点,级联选择功能,内有具体案例

    C#/.NET语言的GIT忽略文件模板(.gitignore)

    C#/.NET语言完美的.gitignore文件,直接覆盖C#项目工作区目录中的 .gitignore 同名文件即可。

    C#文件分割

    C#文件分割,文件分割,还有合成,欢迎转载!

    c#读取图片(gif,png,jpg.bmp)

    c#支持自主选择目录,图片列表,浏览方式有三种(选择图片,手动连续显示,自动显示)本资源为vs2008版

    基于C#的学院学生管理系统.zip

    这个是我学习C#自己制作的一个学院学生管理系统,里面包括代码图片,连接数据库Office2007,能实现数据的存取读写功能,还有图片验证码生成等,可用学生、管理员、教师三个身份之一登录,具有图片验证码、时间显示、...

    C#微软培训资料

    第三章 编写第一个应用程序 .20 3.1 Welcome 程序 .20 3.2 代 码 分 析 .20 3.3 运 行 程 序 .23 .4 添 加 注 释 .25 3.5 小 结 .27 第二部分 C#程序设计基础.28 第四章 数 据 类 型 .28 4.1 值 类 型...

    C# SDK实现百度云OCR的文字识别功能

    最近项目要用到文字识别功能,所以花了几天时间整理了一下。今天就记录一下用C#实现文字识别的过程。...找到解决方案里的引用目录,右键,选择第一个添加引用。然后找到COM项目下的类型库。选择Microsoft Word 12.0 Ob

    C#下使用SharpShell自定义桌面鼠标右键菜单,一次选择多个文件进行后续处理

    自定义鼠标右键菜单(包括菜单小图标,次级菜单,回传程序),可一次性处理多个目录和文件,获取相关地址,将地址作为参数列表传递给后续WPF处理程序 资源中包含右键菜单DLL和WPF处理程序,Release目录下另附有dll的...

    VLC播放器开发C#

    C#语言开发,平台为VS2010,下载者可以从我的资源里下载plugins(不需要积分的)放在bin\debug目录下就可以运行了。

Global site tag (gtag.js) - Google Analytics