gpt4 book ai didi

c# - 如何从命令行参数返回完整路径

转载 作者:太空宇宙 更新时间:2023-11-03 21:36:47 25 4
gpt4 key购买 nike

我有一个可以从资源管理器运行的应用程序,并将选定的目录传递给该应用程序。所以我可以使用下面的代码:

private void frmMain_Shown(object sender, EventArgs e)
{
//open the dir
DirectoryInfo d = new DirectoryInfo(cmdArgs);
SelectDirectoryInTree(d);
}

但是,如果用户选择特殊文件夹,则此操作失败。这些文件夹返回的路径不同。因此,例如,如果用户选择 Libraries\Documents 文件夹(或其中的任何其他文件夹),则返回的 DirectoryInfo 为 ::{xxxxx-xxxx-xxxxx-xxx-xxxxx}\Documents.library-ms

具体异常:

System.ArgumentException: The path is not of a legal form.
at System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength)
at System.IO.Path.GetFullPathInternal(String path)
at System.IO.DirectoryInfo.Init(String path, Boolean checkHost)
at System.IO.DirectoryInfo..ctor(String path)
at FindIt.frmMain.frmMain_Shown(Object sender, EventArgs e) in d:\C#\+Other\FindIt\frmMain.cs:line 476
at System.Windows.Forms.Form.OnShown(EventArgs e)
at System.Windows.Forms.Form.CallShownEvent()
at System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
at System.Windows.Forms.Control.InvokeMarshaledCallbacks()

获取资源管理器外壳提供的正确文件夹的最简单方法是什么?

最佳答案

您是否考虑过使用 Windows API Code Pack ?它包含许多用于 Windows Shell 的函数。

User Libraries Folder 是一个特殊的文件夹,因此它有一个特殊的解析名称,

::{031E4825-7B94-4DC3-B131-E946B44C8DD5}

如果您将以上内容复制并粘贴到资源管理器或运行命令中,您将获得用户库文件夹。

使用 Shell 接口(interface)枚举这些文件夹,您将能够检索每个库中的所有文件夹和文件,并且它们中的每一个都将解析到磁盘上的一个位置。实际上,每个库中的每个文件夹和文件都将分别解析到一个解析位置,该位置通常是相关文件和文件夹的物理(或在某些情况下,网络)位置。

然而,就枚举库中的所有文件而言,您需要使用 shell API,因为它们是一种特殊的文件夹(库将多个物理位置组合成一个“虚拟”位置。)

您应该学习解析名称。一旦您有了某些东西的解析名称,您就可以用系统做很多有趣的事情,包括使用 ShellExecuteEx(这是 Win32 Api 中的一个函数)调出属性表。

Windows API 代码包中有一个名为“KnownFolders Browser”的示例程序,它应该可以为您阐明有关 shell 的许多事情。

关于c# - 如何从命令行参数返回完整路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21326313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com